Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 février 2008
-
23 mars 2007 à 10:00
Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 février 2008
-
24 mars 2007 à 17:06
Bonjour, je créé actuellement une DLL sous VC++, je dois charger une image en ressource dans cette dll avec
hbitmap=(HBITMAP) LoadImage(hInst,"CP_BGBITMAP",IMAGE_BITMAP,0,0|LR_CREATEDIBSECTION);
le problème c'est que je n'arrive pas à retrouver le hInst (ou hmodule) de ma dll.
Un : hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
ou hInst=GetLastInstance();
me donne le handle de l'exe qui a chargé ma dll, donc le système ne trouve pas l'image dans l'exe c'est normal.
Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 février 2008 23 mars 2007 à 13:24
Je développe un pilote, ma fonction DLLMain n'est pas implémenté, je n'ai que DllEntryPoint (HINSTANCE hInstance,ULONG ulReason,LPVOID pv)
et quand je réutilise ma hInstance reçue dans LoadImage(hInstance,"CP_BGBITMAP",IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); , je retombe sur l'instance du programme qui lance ma dll, et donc je n'arrive pas à charger ma ressource depuis ma dll.
Je ne suis pas censé connaitre le dossier où se trouve ma dll (dépend d'ou l'utilisateur aura installé celle-ci). GetModuleFileName(NULL,str,MAX_PATH); me donne le nom de l'exe host, donc je me sens un peu coincé pour retrouver ma bitmap en ressource.
Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 février 2008 23 mars 2007 à 14:02
Oui, j'avais réussi à retrouver cette instance en la sauvegardant lors de l'appel de DllEntryPoint mais si je fait un getmodulefilename sur thismod j'obtient le nom de l'exe et non de ma dll. Mais ma ressource que j'essaye de charger depuis ma dll se trouve dans elle-même pas dans l'exe host. donc il ne trouve pas la bitmap avec load image.
Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 février 2008 23 mars 2007 à 15:28
Ok pour le loadimage je le ferais qu'une fois dans wm create, mais ça ne résout pas le problème que la ressource n'est pas trouvée. Ce n'est pas impossible de charger une ressource d'une dll à partir d'elle même ?
J'ai toujours chargé mes ressources de cette façon sous devcpp, maintenant je travaille sous vc++, ça fonctionne de la même façon ?
Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 février 2008 23 mars 2007 à 21:41
Bon je ne trouve pas la solution, tout me semble bien déclaré, j'ai la version express de VC studio, qui ne gère pas directement les fichiers.rc, elle semble les compiler, mais je me demande si elle fait bien tous les liens. Comme je suis étudiant je vais voir pour me procurer la version pro. On verra si si je peux acceder à ma ressource.
Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 février 2008 24 mars 2007 à 16:33
Avec Visual Studio 2005 Pro ça a donné la même chose, le problème vient bien du hInstance car j'ai trouvé une solution de secours qui fonctionne :
HINSTANCE me = LoadLibrary(DLL_NAME);
hbitmap=(HBITMAP) LoadImage(me,MAKEINTRESOURCE(IDB_CPBGBITMAP),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
FreeLibrary(me);
Ma dll se charge elle même le temps d'extraire l'image.
Ceci m'embète un peu comme méthode, car je crain que la dll ne puisse pas toujours être chargée. Enfin pour l'instant ça me débloque sur ce point.
Si quelqu'un a une explication sur les faits ...
En tout cas merci BruNews pour t'être penché sur mon problème.