GetWindowModuleFileName undeclared identifier

Résolu
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 - 16 août 2005 à 23:59
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 17 août 2005 à 20:03
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

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 août 2005 à 03:53
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.
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 00:07
Essaie dans cet ordre:
#define _WIN32_WINNT 0x0500
#include <windows.h>

ciao...
BruNews, MVP VC++
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
17 août 2005 à 00:08
Marche poa :(

Have Fun ...
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
17 août 2005 à 02:54
salut,

un GetProcAddress sur ce nom de fonction fonctionne ?

@++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 août 2005 à 08:50
Bizarre, je l'utilise sans pb sans #define
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 09:06
vi, possible que soit à cause d'un vieux SDK car pas de prob non plus.

ciao...
BruNews, MVP VC++
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
17 août 2005 à 14:54
Merci pour votre aide !! ;-)

Have Fun ...
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 août 2005 à 14:58
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 15:16
0x501

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 15:20
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++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 août 2005 à 15:34
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.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 août 2005 à 16:00
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 16:10
mon compilo indique pourtant:
#define WINVER _WIN32_WINNT

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 août 2005 à 16:37
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 16:53
sur que y a un schmoll...

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

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 août 2005 à 20:03
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.
0
Rejoignez-nous