GetWindowLong cast waring C4312



  • Hi,

    ich habe schon seit einiger Zeit ein Problem beim besorgen des HINSTANCE Handels.

    Unter VC++ 6 brachte folgender Aufruf keinen Fehler:

    hInstance = reinterpret_cast<HINSTANCE>(GetWindowLong (hWnd, GWL_HINSTANCE));

    Aber seit ich auf die neue Version umgestellt habe bekomm ich eine cast Warning:

    warning C4312: 'reinterpret_cast': Konvertierung von 'LONG' in größeren Typ 'HINSTANCE'

    gut, das hindert mich nicht an dem ausführen des Programms aber ist natürlich nicht schön. Und spätestens beim Release hab ich ungern Warnings im Code...

    Weis jemand wie ich die Warnung wegbekomme?
    (allerdings ohne das ich es einfach mit #pragma warning(disable: 4312) ignoriere 😉 )



  • 64 bit portability checker dings ausdrehen (schlecht), oder GetWindowLongPtr verwenden (besser).



  • hustbaer schrieb:

    64 bit portability checker dings ausdrehen (schlecht), oder GetWindowLongPtr verwenden (besser).

    auch wenn man GetWindowLongPtr kommt eine warnung



  • also wenn ich das verwende:

    hInstance = reinterpret_cast<HINSTANCE> (GetWindowLongPtr (hWnd, GWLP_HINSTANCE));

    bekomm ich immer noch den Fehler...



  • Der_Knob schrieb:

    Weis jemand wie ich die Warnung wegbekomme?
    (allerdings ohne das ich es einfach mit #pragma warning(disable: 4312) ignoriere 😉 )

    Du kannst das 'Warning-Level deines Compilers herunter setzen, das entspricht aber einer (eher
    übersichtlicheren) Anwendung des #pragma-Befehls.

    Du kannst diese Warnung aber getroßt ignorieren; sie ist in diesem Fall eigentlich überflüssig.



  • Ok, dein Wort in Gottes Ohren 😃

    Danke!



  • hustbaer schrieb:

    64 bit portability checker dings ausdrehen (schlecht), oder GetWindowLongPtr verwenden (besser).

    Hat damit nix zu tun ...

    Der_Knob schrieb:

    Ok, dein Wort in Gottes Ohren 😃

    Danke!

    😉



  • Wenn du die 64-Bit Warnungen abschaltest dann kommt die Warnung nicht mehr.



  • Hat damit nix zu tun ...

    Natürlich hat das damit was zu tun OMG, und nur damit.
    Die Warning kommt weil auf 64 Bit Plattformen ein LONG/ULONG nichtmehr gross genug ist nen Poiner zu halten, und man daher auch nie ein LONG/ULONG auf nen Pointer casten sollte.
    Mann Mann Mann...



  • @hustbaer:
    Jops sorry hast Recht, my fault! 😉
    Hatte es mit nem alten SDK versucht und nicht die 'Ptr-Version' von GetWindowLong genutzt... . Also nochmal sorry 👍



  • Jo kein Problem 🙂


Log in to reply