Conversion betw. ordinals and pointers not portable [gelöst]
-
- 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]
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!
Re: Conversion between ordinals and pointers is not portable
http://www.freepascal.org/docs-html/rtl ... ruint.html" onclick="window.open(this.href);return false;
-
- 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
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!
Re: Conversion between ordinals and pointers is not portable
Naja, bei der Warnung geht's ja um portablen Code (Haupts. 32bit <> 64bit). LPARAM ist auf 64bit Windows auch 64bit lang afaik.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.
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.
-
- 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
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!
Re: Conversion between ordinals and pointers is not portable
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.RSE hat geschrieben:Hm, was lese ich nun aus deiner Aussage? Der Hint ist eigentlich nicht gerechtfertigt und mein Code IST portabel (32bit <> 64bit)?
Deshalb ist es auch nur ein Hint und keine Warnung.
-
- 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
Dann weiß er es also bei PtrInt auch nicht... Na wie dem auch sei, ich ignorier es einfach, danke für die Erklärung!theo hat geschrieben:Der Compiler kann aber nicht wissen, dass auf 64bit Windows auch der LPARAM 64bit lang wird.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!