Chargement de dll incluse dans les ressources

Résolu
Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008 - 30 déc. 2005 à 12:21
Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008 - 31 déc. 2005 à 11:15
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 déc. 2005 à 12:49
Le 1er param idem GetModuleFilename, faut consulter MSDN.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 déc. 2005 à 12:26
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++
0
Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008
30 déc. 2005 à 12:40
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/
0
Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008
31 déc. 2005 à 11:15
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/
0
Rejoignez-nous