[C(++)] GetWindowLongPtr

GetWindowLongPtr [C(++)] - C++ - Programmation

Marsh Posté le 04-05-2004 à 21:27:02    

Bonjour à tous,
 
Je cherche à utiliser l'API GetWindowLongPtr pour compiler une source qui m'intéresse.
Avec Win2000 et VC++ 6, l'API ne semble pas dans les include
pourtant selon MSDN on la trouve depuis win95 !
Je la déclare manuellement, elle n'est pas dans les lib !
J'utilise ensuite GetProcAddress (bourrin !!), et toujours rien,
Je vérifie, et elle n'est pas exportée dans mon user32.dll !!!
Je croie vivre un cauchemard.
Help ?
 
 
MSDN (google "GetWindowLongPtr" )
 
Header Declared in Winuser.h, include Windows.h  
Import library User32.lib  
Minimum operating systems Windows 95, Windows NT 3.1  
Unicode Implemented as Unicode and ANSI versions on Windows NT, Windows 2000, Windows XP

Reply

Marsh Posté le 04-05-2004 à 21:27:02   

Reply

Marsh Posté le 04-05-2004 à 22:29:27    

petite info supplémentaire, il s'agit de la version 64 bit de GetWindowLong, mais toujours le meme probleme...

Reply

Marsh Posté le 04-05-2004 à 22:29:49    

Pourquoi ne te sers tu pas de GetWindowLong() ? l'unique avantage de GetWindowLongPtr est de marcher en 64 bits...
 
edit: ... hum... à quelques secondes près ;)


Message édité par pedro-2480 le 04-05-2004 à 22:30:20

---------------
- Pierre Baudelet -
Reply

Marsh Posté le 04-05-2004 à 23:04:06    

Si aucune des deux fonctions n'est déclarée dans ton winuser.h, mets à jour ton platform SDK chez microsoft, la dernière version du platform SDK de février 2003 contient ces déclarations dans winuser.h


---------------
- Pierre Baudelet -
Reply

Marsh Posté le 05-05-2004 à 09:25:59    

Mais c'est quand meme curieux que la fonction ne soit pas exportée dans user32.dll !

Reply

Marsh Posté le 05-05-2004 à 09:39:18    

Citation :

Pourquoi ne te sers tu pas de GetWindowLong() ? l'unique avantage de GetWindowLongPtr est de marcher en 64 bits...


Parce que MS demande de le faire, et que ça fait sauter le warning de VC++ concernant les pblm de portabilité.
 

Citation :

Mais c'est quand meme curieux que la fonction ne soit pas exportée dans user32.dll !


Parce que GetWindowLongPtr, tout comme la plupart des fonctions (GetWindowsLong, MessageBox, ...) n'existe simplement pas !
=> GetWindowLongPtrA, GetWindowLongPtrW, ...
Si tu ne les trouves pas (winuser.h), il serait effectivement temps de mettre à jour ton SDK.


Message édité par HelloWorld le 05-05-2004 à 09:39:30
Reply

Marsh Posté le 05-05-2004 à 16:39:54    

Uhuhuh je me doute bien que pour chaque API il existe une version A et une version W. Peut-etre que la version Ptr est juste une macro ??

Reply

Marsh Posté le 05-05-2004 à 16:55:38    

GetWindowLongPtr est une macro soit sur GetWindowLongPtrA ou W.

Code :
  1. #ifdef _WIN64
  2. WINUSERAPI
  3. LONG_PTR
  4. WINAPI
  5. GetWindowLongPtrA(
  6.     HWND hWnd,
  7.     int nIndex);
  8. WINUSERAPI
  9. LONG_PTR
  10. WINAPI
  11. GetWindowLongPtrW(
  12.     HWND hWnd,
  13.     int nIndex);
  14. #ifdef UNICODE
  15. #define GetWindowLongPtr  GetWindowLongPtrW
  16. #else
  17. #define GetWindowLongPtr  GetWindowLongPtrA
  18. #endif // !UNICODE
  19. WINUSERAPI
  20. LONG_PTR
  21. WINAPI
  22. SetWindowLongPtrA(
  23.     HWND hWnd,
  24.     int nIndex,
  25.     LONG_PTR dwNewLong);
  26. WINUSERAPI
  27. LONG_PTR
  28. WINAPI
  29. SetWindowLongPtrW(
  30.     HWND hWnd,
  31.     int nIndex,
  32.     LONG_PTR dwNewLong);
  33. #ifdef UNICODE
  34. #define SetWindowLongPtr  SetWindowLongPtrW
  35. #else
  36. #define SetWindowLongPtr  SetWindowLongPtrA
  37. #endif // !UNICODE
  38. #else  /* _WIN64 */
  39. #define GetWindowLongPtrA   GetWindowLongA
  40. #define GetWindowLongPtrW   GetWindowLongW
  41. #ifdef UNICODE
  42. #define GetWindowLongPtr  GetWindowLongPtrW
  43. #else
  44. #define GetWindowLongPtr  GetWindowLongPtrA
  45. #endif // !UNICODE
  46. #define SetWindowLongPtrA   SetWindowLongA
  47. #define SetWindowLongPtrW   SetWindowLongW
  48. #ifdef UNICODE
  49. #define SetWindowLongPtr  SetWindowLongPtrW
  50. #else
  51. #define SetWindowLongPtr  SetWindowLongPtrA
  52. #endif // !UNICODE
  53. #endif /* _WIN64 */


Toutes les fonctions ne sont pas en double version, seulement celles qui manipulent des chaines.

Reply

Marsh Posté le 06-05-2004 à 23:27:27    

tu cherchais pas à compiler virtualdub ?

Reply

Marsh Posté le 07-05-2004 à 16:05:06    

hmmm nop !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed