Vortigaunt
Messages postés11Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention23 mars 2008
-
9 mars 2008 à 17:12
Vortigaunt
Messages postés11Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention23 mars 2008
-
10 mars 2008 à 16:20
Bonjour à tous,
J'ai un petit problème sous C::B.
J'aimerai obtenir, à partir d'un processus, son chemin absolu. Je n'ai pas de problème lors de l'ouverture du processus, ni de l'affichage de son nom (style msnmgr.exe).
Le problème se situe lorsque j'utilise la fonction GetModuleFileNameEx(), car sous code::blocks, impossible à faire fonctionner sans l'erreur du compilateur: undefined reference to `GetModuleFileNameExA@16'
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 9 mars 2008 à 19:02
C'est normal car tu n'as pas alloué d'espace pour accueillir les chemins. Dans ton code test est déclaré seulement comme pointeur. Tu dois faire par exemple:
char test[260];
//....
getmodulefilenameex(hOpenPro,NULL,test,taille);
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 9 mars 2008 à 17:37
Salut,
Cette fonction se trouve dans psapi.dll. Il faudra donc lier ton projet avec psapi.lib. Une option du linker du genre -lpsapi serait aussi possible. La dernière solution reste le chargement dynamique avec LoadLibray() et GetProcAddress().
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 9 mars 2008 à 18:15
//Définir un type de pointeur pour GetModuleFileNameEx():
typedef DWORD (WINAPI* PGETMODULEFILENAMEEX) (HANDLE, HMODULE, LPTSTR, DWORD);
// Charger la DLL psapi.dll
HMODULE hDll=LoadLibrary("psapi.dll");
// Obtenir l'adresse de la fonction GetMuduleFileNameExA():
PGETMODULEFILENAMEEX getmodulefilenameex=(PGETMODULEFILENAMEEX)GetProcAddress(hDll,"GetModuleFileNameExA");
//Appel de la fonction:
getmodulefilenameex(....);
//....
// Libérer la DLL en fin d'utilisation:
FreeLibrary(hDll);
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 9 mars 2008 à 18:31
Neo_Fr >> Le problème se situe au niveau de l'édition des liens. Même si ça compile correctement, l'exécutable ne sera généré qu'après avoir ajouté la liaison avec psapi.dll. Si ton exe est généré, ça prouve que ton projet est déjà lié avec cette dll. Il s'agit sûrement d'une option du linker présente dans ton projet.
Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 20142 9 mars 2008 à 18:39
Nan j'ai bien ajouter manuellement -lpsapi ds les options, ce qui m'étonne c'est que ca ne compile pas chez lui alors qu'on utilise le meme compilateur
Ce que je veux arriver à faire est lister tous les processus avec leur chemin absolu. Cependant, à la console je n'affiche que des caractères illisibles.