IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Lister les resources d'un exe dans un TreeView.


Sujet :

Windows

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 119
    Points : 106
    Points
    106
    Par défaut Lister les resources d'un exe dans un TreeView.
    Yop à tous,

    Voila j'ai un souci et je ne sais vraiment pas d'ou cela vient.
    En fait je voudrait lister les resources d'un executable dans un treeview. Pour ce faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BOOL __stdcall RcInit(char* szFilePath,HWND hwTV)
    {
    	hMod = LoadLibraryEx(szFilePath,NULL,DONT_RESOLVE_DLL_REFERENCES);
    	if(hMod == NULL)return FALSE;
    
    	EnumResourceTypes(hMod,(ENUMRESTYPEPROC)EnumResTypeProc,hwTV);
    
    	return TRUE;
    }
    C'est ma fonction de départ. dedans je fais un EnumResourceType qui va appeler cette fonction callback :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    BOOL CALLBACK EnumResTypeProc(HMODULE hModule,LPTSTR lpszType,LONG_PTR lParam)
    {
    	TV_INSERTSTRUCT tvisItem;
    	HTREEITEM hParent;
    	
    	/* Ajout root. */
    	ZeroMemory(&(tvisItem.item), sizeof(TV_ITEM));
    
    	tvisItem.item.mask  = TVIF_TEXT;
    
    	tvisItem.hInsertAfter = TVI_LAST;
    	tvisItem.hParent = TVI_ROOT;
    	tvisItem.item.pszText = lpszType;
    
    	hParent = TreeView_InsertItem(lParam,&tvisItem);
    
    	if(EnumResourceNames(hMod,lpszType,(ENUMRESNAMEPROC)EnumResNameProc,hParent)==FALSE)
    	{
    		char szBuffer[10];
    		wsprintf(szBuffer,"%d",GetLastError());
    		MessageBox(NULL,"yop",szBuffer,MB_OK);
    	}
    
    	return TRUE;
    }
    Et j'ai bien dans mon treeview un type ici F_EXE qui est en root. Mais la ou cela coince c'est lors de l'appel de EnumResourceNames , j'ai un 998 Invalid access to memory location . Et je ne voi vraiment pas d'ou cela vien.

    En fait dans ma tête ce que je veu faire, c'est pour chaque type de resource trouvée , liste les noms et les ajouter en enfant de mon type de resource dans mon treeview.

    J'espère avoir été assez claire :s

    Merci d'avance pour vos réponses.

    Accesoirement je met la fonction callback pour les noms :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    BOOL CALLBACK EnumResNameProc(HMODULE hModule,LPCTSTR lpszType,LPTSTR lpszName,LONG_PTR lParam)
    {
    	TV_INSERTSTRUCT tvisItem;
    	HTREEITEM hParent;
    	/* Ajout root. */
    	ZeroMemory(&(tvisItem.item), sizeof(TV_ITEM));
    
    	tvisItem.item.mask  = TVIF_TEXT;
    
    	tvisItem.hInsertAfter = TVI_LAST;
    	tvisItem.hParent = lParam;
    	tvisItem.item.pszText = lpszName;
    	hParent = TreeView_InsertItem(hwTreeVRc,&tvisItem);
    
    	return TRUE;
    
    }
    ++

    deck_bsd

    /*************************************/
    [http://dckapps.azurewebsites.net/]

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 119
    Points : 106
    Points
    106
    Par défaut
    J'ai trouvé d'ou cela vient,

    c'est de la ligne tvisItem.item.pszText = lpszName; dans la fonction callback pour les noms.

    lpszName est de type LPTSTR et cela ne va pas :s Aparement ce serait de l'UNICODE.

    Quelqu'un a-t-il une solution?
    ++

    deck_bsd

    /*************************************/
    [http://dckapps.azurewebsites.net/]

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Il faut peut-être gérer des wchar.

    Il faut que tu appelles les API de gestion de ressources en gérant des Wide Char ( regarde dans le MSDN ), que tu détectes le code page de la langue courante de l'OS et que tu convertisses les wide char avec
    WideCharToMultiByte()
    WideCharToMultiByte en fonction du code page convertit un wide char de 16bits en un char * de 8bits.

    Voilà comment est défini LPSTR dans winnt.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef char CHAR;
    
    typedef CHAR *LPSTR, *PSTR;

Discussions similaires

  1. Lister les fichiers d'un répertoire dans une feuille Excel
    Par AlainTech dans le forum Contribuez
    Réponses: 3
    Dernier message: 10/03/2016, 14h14
  2. lister les resources disponibles dans un projet
    Par *alexandre* dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 12/11/2007, 18h48
  3. lister les tables de la base dans un formulaire.
    Par zeloutre dans le forum IHM
    Réponses: 3
    Dernier message: 06/03/2007, 17h12
  4. Lister les DLL d'un EXE
    Par uriotcea dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/09/2006, 12h30
  5. Réponses: 1
    Dernier message: 20/12/2005, 19h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo