Warning eliminieren?
-
HI,
ich bekomme bei folgendem ein warning:
wchar_t buf[100]; SendMessage(bla,LB_GETTEXT,item->itemID,(long)buf);warning C4311: 'type cast' : pointer truncation from 'wchar_t *' to 'long'
Wie kann ich diesen warning beheben?
-
Sollte AFAIK nur auftreten, wenn du für 64-Bit kompilierst. In diesem Fall ist ein Zeiger einfach zu groß für einen 32-Bit-long.
Falls du C++ programmierst, hilft es vielleicht reinterpret_cast zu nehmen.
-
Selbst mit reinterpret_cast tritt die warning noch auf

-
Geh auf die Projekteinstellungen und trag bei "Nach 64Bit-Kompatibilitätsproblemem suchen" No ein.
-
cd9000 schrieb:
Geh auf die Projekteinstellungen und trag bei "Nach 64Bit-Kompatibilitätsproblemem suchen" No ein.
Das ist aber keine feine Lösung?
-
Jesus ist Da schrieb:
Das ist aber keine feine Lösung?
Scheint so.
Hab grad nochmal im Platform SDK nachgesehen, die richtige Lösung ist:
7. The LPARAM, WPARAM, and LRESULT types change size with the platform.
When compiling 64-bit code, these types expand to 64 bits, because they typically hold pointers or integral types. Do not mix these values with DWORD, ULONG, UINT, INT, int, or long values. Examine how you use these types and ensure that you do not inadvertently truncate values.Du solltest also nicht auf long, sondern auf LPARAM casten.
-
kapier ich net?
typedef long LONG_PTR;
typedef LONG_PTR LPARAM;müsste doch long gehen?
-
Kommt die Warnung denn noch, wenn du auf LPARAM castest?
LONG_PTR ist nur auf deiner 32-Bit-Plattforum 32 Bit groß. Auf einem 64-Bit-System hat LONG_PTR 64 Bit.
LONG ist aber immer ein "32-bit signed integer", also zu klein für einen 64-Bit-Zeiger.
-
wie kann LONG_PTR 64Bit haben wenn die definition ganz klar long ist?
-
Jesis ist Da schrieb:
wie kann LONG_PTR 64Bit haben wenn die definition ganz klar long ist?
Die Definition ist auf deiner Maschine ein 32-Bit-Integer.
Du solltest auch das Umfeld der Definition beachten:
// Ausschnitt aus basetsd.h #if defined(_WIN64) typedef __int64 LONG_PTR, *PLONG_PTR; #else typedef _W64 long LONG_PTR, *PLONG_PTR; #endif