Pk lorsque je compile ça me sort GetWindowModuleFileName undeclared identifier ??
Pourtant j'ai déclaré la librairie windows.h, j'ai aussi essayé en ajoutant Winuser.h et aussi avec #pragma comment(lib, "user32.lib") mais rien à faire ça marche pas !!
Je viens de ragarder le fichier "winuser.h" dans lequel
GetWindowModuleFileName() est déclarée. Elle fait partie d'un groupe de
fonctions contenues dans un bloc #if #endif.
#if(WINVER >= 0x0500)
//...........
#endif /* WINVER >= 0x0500 */
Pour résoudre le problème, il suffit donc de commencer le code en toute première ligne par:
Je viens de voir le fichier "winuser.h" d'un récent SDK. C'est pareil,
cette fonction figure dans le même bloc #if #endif. Je pense que le
problème vient plutôt du compilateur. Dans Visual 6, WINVER est défini
par défaut à 0x0400. Donc inférier à 0x0500 requis par cette
fonction. J'ai fait int ver = WINVER; dans un programme et ça me donne bien 0x0400. Vous pouvez me dire la valeur par défaut retournée par vos compilateurs? Merci.
Merci BruNews, on est maintenant sûr que ça vient du compilateur.
Oui c'est vrai moi aussi je pensais la même chose de _WIN32_WINNT. Cest
pour ça que cela m'a intrigué. Je ne sais pas pourquoi Microsoft
utilise les deux alors qu'une seule suffirait.
En regardant la page MSDN de la fonction GetWindowModuleFileName() on peut lire:
Minimum operating systems
: Windows 95, Windows NT 4.0 SP3
Il y'a erreur quelque part. Soit dans la documentation du site, soit
dans les fichiers *.h fournis avec le compilateur. Je viens de voir que
cette fonction existe aussi dans Windows 98 ayant comme
WINVER 0x0401. Je me demande alors pourquoi ils ont fixé
0x0500 comme version minimum pour cette fonction. 0x0500 correspond à
Win Me et Win2000.
le mieux est d'avoir toujours
#define _WIN32_WINNT 0x0501
#include <windows.h>
dans cet ordre et tout va bon.
C'est déjà fait tout seul dans VS 2003 mais je continue par principe.
Cela précise que la plateforme cible est Windows XP. Moi je préfère ne
définir _WIN32_WINNT que si je veux faire une application qui ne
tournera que sur certaines plateformes (à cause de certaines fonctions
bien sûr). En évitant de le définir, on est sûr que notre programme
tournera aussi sur les anciennes plateformes (95, 98, NT etc...).
Normalement oui ses systèmes sont dépassés mais ils sont encore
utilisés. Dernièrement, une école m'a demandé de faire une application
qui puisse tourner sur tous les Windows depuis Win98. Ils ont un large
parc informatique où il y'a tout sauf linux.