GetWindowModuleFileName undeclared identifier [Résolu]

Signaler
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
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 !!



Ou est l'astuce ??


Have Fun ...

20 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,

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:

#define WINVER 0x0500



Je viens de faire le test. Ca marche.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Essaie dans cet ordre:
#define _WIN32_WINNT 0x0500
#include <windows.h>

ciao...
BruNews, MVP VC++
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

Marche poa :(

Have Fun ...
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

un GetProcAddress sur ce nom de fonction fonctionne ?

@++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Bizarre, je l'utilise sans pb sans #define
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
vi, possible que soit à cause d'un vieux SDK car pas de prob non plus.

ciao...
BruNews, MVP VC++
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

Merci pour votre aide !! ;-)

Have Fun ...
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,

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.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
0x501

ciao...
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
et WINVER est un #define de _WIN32_WINNT dnc bizzare que n'allait pas ce que j'avais mis plus haut aurait du être idem.

ciao...
BruNews, MVP VC++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Je viens d'apprendre que _WIN32_WINNT est différente de WINVER.

_WIN32_WINNT : la plateforme cible doit être de technologie NT(NT,Win2000, XP). Ca permet d'accéder aux fonctions réservées à ces systèmes.

WINVER : la plateforme cible peut aller de Win95 à XP.

GetWindowModuleFileName() n'est pas réservée à la technologie NT car elle existe aussi dans Windows Me.

Je pense avoir bien compris maintenant.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
mon compilo indique pourtant:
#define WINVER _WIN32_WINNT

ciao...
BruNews, MVP VC++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
sur que y a un schmoll...

ciao...
BruNews, MVP VC++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Dans VS6 _WIN32_WINNT n'est pas défini du tout même en incluant "windows.h".

Tout ce qu'on trouve au tout début du fichier c'est ceci:

#ifndef WINVER

#define WINVER 0x0501

#else

#if defined(_WIN32_WINNT) && (WINVER < 0x0400) && (_WIN32_WINNT > 0x0400)

#error WINVER setting conflicts with _WIN32_WINNT setting

#endif

#endif



Pourtant mon compilo retourne 0x0400 et pas 0x0501 comme défini plus haut. Je ne sais pas d'où il sort cette valeur.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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.

ciao...
BruNews, MVP VC++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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...).
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Plus personne ne les prend en charge, qu'elles passent aux oubliettes le plus vite possible.

ciao...
BruNews, MVP VC++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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.