Comment puis-je appeler SetWindowLong () dans les versions 64 bits de Windows?
Dans le fichier d'en-tête WinUser.h
il y a une partie dans laquelle les constantes de la deuxième paramètre de SetWindowLong()
sont définis.
//...
#define GWL_WNDPROC (-4)
#define GWL_HINSTANCE (-6)
#define GWL_HWNDPARENT (-8)
#define GWL_STYLE (-16)
#define GWL_EXSTYLE (-20)
#define GWL_USERDATA (-21)
#define GWL_ID (-12)
#ifdef _WIN64
#undef GWL_WNDPROC
#undef GWL_HINSTANCE
#undef GWL_HWNDPARENT
#undef GWL_USERDATA
#endif /* _WIN64 */
#define GWLP_WNDPROC (-4)
#define GWLP_HINSTANCE (-6)
#define GWLP_HWNDPARENT (-8)
#define GWLP_USERDATA (-21)
#define GWLP_ID (-12)
//...
Mais ils sont juste après undefined si _WIN64
est défini; et il est défini dans mon système 64 bits.
Comme vous le voyez, il y a aussi un GWLP_***
ensemble de constantes, mais elles ne sont pas documentées dans la page de SetWindowLong()
.
Pourquoi ces constantes de undefined dans les systèmes x64?
Qu'est-ce que l'alternative de l'appel de SetWindowLong()
dans les systèmes x64?
Mon système:
Système d'exploitation: Windows 7 Ultimate x64 SP1
IDE: Visual Studio 2012 Ultimate mise à Jour 3
source d'informationauteur hkBattousai
Vous devez vous connecter pour publier un commentaire.
Certains de la fenêtre valeurs de données (reportez-vous à "pointeur" de la taille des objets, comme la procédure de fenêtre, par exemple) doivent être 64 bits dans une version x64. L'ancien
SetWindowLong()
etGetWindowLong()
les fonctions sont limitées àDWORD
de taille moyenne (32 bits) les valeurs pour la compatibilité ascendante, et Microsoft ont introduit de nouvelles versions,SetWindowLongPtr()
etGetWindowLongPtr()
qui vous permettent de travailler avec le pointeur de la taille des valeurs (32 bits 32 bits et 64 bits dans un environnement 64 bits).De ces jours, il est recommandé que vous utilisez toujours
SetWindowLongPtr()
et laGWLP_xxx
constantes, si vous êtes à la construction de 32 ou 64 bits, mais dans une version 64 bits vous besoin à utiliser les nouvelles fonctions et de sorte que le définit #non défini pour causer des erreurs de build qui vous obligent à corriger votre code.