Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
4. Mär 2011
Wie gesagt, das wurde vor vielen Jahren schon in C, C++ und Co. so eingeführt und wir machen das jetzt nach.
(tja, wer zuspät kommt, den bestraft das Leben)
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
4. Mär 2011
WPARAM und LPARAM sollten wachsen, sowie auch der Pointer, aber Integer leider nicht, weswegen du dir beim Cast von Pointer auf Integer so knapp die Häfte der Bits wegschneiden würdest. :wall:
(ja, ich weiß, man könnte glattt glauben daß der Integer auf 64 bit wird, so wie er damals mal 16 Bit war,
aber aus unerfindlichen Gründen hat man sich dagegenentschieden ... diesmal liegt aber die Schuld...
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
4. Mär 2011
Deine Variable, auf die du zugreifen wolltest, war ja wirklich weg, also stimmte der Fehler schon. :wink:
Bei PostMessage müßte man eventuell nochaufpassen, daß der MessageQueue nicht überläuft.
Sind zuviele unverarbeitete Messages vorhanden, dann wird deine Message nicht eingetragen und keiner gibt mehr das Objekt frei.
if not PostMessage(..., LPARAM(x)) then begin
x.Free;
// und...
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
4. Mär 2011
Das Objekt ja, aber die lokale Variable, worin der Objektzeiger abgelegt wurde und worauf der übergebene Zeiger zeigt, die wird natürlich spätestens zum Prozedurende weg sein.
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
4. Mär 2011
Um den Grund nochmal zu nennen:
Du versendest einen Zeiger auf die Variable und nach Beenden der Prozedur ist diese Variable nicht mehr vorhanden.
PS: Ein Objektzeiger ist, wie der Name vermuten läßt, intern auch "nur" ein Zeiger, weswegen man ihn auch direkt casten kann.