Conversion betw. ordinals and pointers not portable [gelöst]

Antworten
RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Conversion betw. ordinals and pointers not portable [gelöst]

Beitrag von RSE »

Gibt es einen Weg den im Titel genanten Hint zu umgehen? Er tritt bei einem Typecast bei der Verarbeitung einer Windows-Message auf (PCWPRetStruct(lParam)). Wahrscheinlich muss man es einfach ignorieren, aber vielleicht git es ja doch einen Kniff, wie man diesen Typecast anders (glücklicher) ausdrücken kann.
Zuletzt geändert von RSE am Mi 16. Dez 2009, 18:52, insgesamt 1-mal geändert.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!


RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Conversion between ordinals and pointers is not portable

Beitrag von RSE »

Mit dem Typ LPARAM bin ich ja festgelegt, und LPARAM = LONG_PTR = PtrInt; Von daher passt das also, aber das PCWPRetStruct ist und bleibt nunmal erstmal ein normaler Pointer.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Conversion between ordinals and pointers is not portable

Beitrag von theo »

RSE hat geschrieben:Mit dem Typ LPARAM bin ich ja festgelegt, und LPARAM = LONG_PTR = PtrInt; Von daher passt das also, aber das PCWPRetStruct ist und bleibt nunmal erstmal ein normaler Pointer.


Naja, bei der Warnung geht's ja um portablen Code (Haupts. 32bit <> 64bit). LPARAM ist auf 64bit Windows auch 64bit lang afaik.
Deshalb ist es dort kein LONG_PTR (32bit) afaics. Jedenfalls sollte man Pointer nicht in einen Cardinal packen, wenn man gedenkt auch für 64bit zu kompilieren.

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Conversion between ordinals and pointers is not portable

Beitrag von RSE »

Hm, was lese ich nun aus deiner Aussage? Der Hint ist eigentlich nicht gerechtfertigt und mein Code IST portabel (32bit <> 64bit)?
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Conversion between ordinals and pointers is not portable

Beitrag von theo »

RSE hat geschrieben:Hm, was lese ich nun aus deiner Aussage? Der Hint ist eigentlich nicht gerechtfertigt und mein Code IST portabel (32bit <> 64bit)?


Der Hint ist wahrsch. in diesem Falle zu ignorieren. Der Compiler kann aber nicht wissen, dass auf 64bit Windows auch der LPARAM 64bit lang wird.
Deshalb ist es auch nur ein Hint und keine Warnung.

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Conversion between ordinals and pointers is not portable

Beitrag von RSE »

theo hat geschrieben:Der Compiler kann aber nicht wissen, dass auf 64bit Windows auch der LPARAM 64bit lang wird.


Dann weiß er es also bei PtrInt auch nicht... Na wie dem auch sei, ich ignorier es einfach, danke für die Erklärung!
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Antworten