Chargement de dll incluse dans les ressources [Résolu]

Signaler
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008
-
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008
-
Bonjour j'ai un problème pour charger une dll situé en ressource dans une autre dll, j'ai à présent ceci :

fichier .rc
librarydll BINARY "dllconstructeur.dll"

fichier .h
#define librarydll 1

fichier .c

static HGLOBAL hgbl;
static BYTE *pdata;
static HRSRC hrsrc;
DWORD len, v;
static HANDLE hfl;

GetModuleFileName(NULL,&chemindlltemp,MAX_PATH);
*(strrchr(chemindlltemp, '\\')+1)=0;
strcat(chemindlltemp,"Temp\");
if( (_access(chemindlltemp, 0 )) == -1 )CreateDirectory(chemindlltemp,0);
strcat(chemindlltemp,"dllconstructeurtemp.dll");

hrsrc = FindResource(0, (LPCTSTR)librarydll, "BINARY");
if(hrsrc){
hgbl = LoadResource(0, hrsrc);
if(hgbl){
len = SizeofResource(0, hrsrc);

if(len == 3584){

hfl = CreateFile(
chemindlltemp,
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);

if(hfl != INVALID_HANDLE_VALUE){
pdata = (BYTE*) LockResource(hgbl);
v = 0;
if(!WriteFile(hfl, pdata, len, &v, 0))strcat(errorlog,"Impossible d'écrire le fichier\n");

CloseHandle(hfl);
FreeResource(hgbl);
if(len == v){

hModDll = LoadLibrary(chemindlltemp);
if(!hModDll)strcat(errorlog,"Impossible de charger la dll\n");


}else{
//DeleteFile(chemindlltemp);
if(v==0)strcat(errorlog,"la dll est vide\n");
else strcat(errorlog,"la dll n'a pas la taille attendue\n");
}
}else strcat(errorlog,"la dll n'a pas pu être créé\n");


}else strcat(errorlog,"la dll ressource n'a pas la taille attendue\n");


}else strcat(errorlog,"la dll ressource n'a pas pu être chargée\n");

}else strcat(errorlog,"la dll ressource n'a pas été trouvée\n");


sauf que je suis bloqué au premier pas "la dll ressource n'a pas été trouvée" je pense que j'ai pourtant bien définit le type de ressource et je n'ai pas d'erreur de ressources.
qu'est-ce qui cloche ?

http://www.rc-bot.com/

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Le 1er param idem GetModuleFilename, faut consulter MSDN.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
GetModuleFilename il faur le handle DLL en 1er param sinon tu as nom exécutable.

_access() n'a rien à faire dans du code Windows:
if(0 > (long)GetFileAttributes(szfile)) ABSENT

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008

Oui le GetModuleFilename sans premier param c'est fait pour, c'est pour loger la dlltemp dans un sousdossier "Temp" de l'exe maitre. Merci pour le _acces() c'est corrigé.

Mais mon problème est un peu plus loin et je ne vois pas pourquoi il n'arrive pas à me retourner quelquechose pour mon FindRessource.

http://www.rc-bot.com/
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008

Merci bcp, je croyais que dans Load et FindResource si on mettait 0 en premier param ça prenait le handle du module dans lequel la fonction est écrite, mais c'est celui de l'exe maitre quand c'est une dll.

http://www.rc-bot.com/