begin process at 2012 05 30 15:50:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Shell

 > 

Retrouver le hmodule d'une dll


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Retrouver le hmodule d'une dll

vendredi 23 mars 2007 à 10:00:36 | Retrouver le hmodule d'une dll

Mastersam

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.

Comment retrouver le hmodule, de ma dll ?




vendredi 23 mars 2007 à 10:09:34 | Re : Retrouver le hmodule d'une dll

BruNews

Administrateur CodeS-SourceS
Enregistre le hmodule dans DllMain().

ciao...
BruNews, MVP VC++
vendredi 23 mars 2007 à 13:24:16 | Re : Retrouver le hmodule d'une dll

Mastersam

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.

Une idée ?

vendredi 23 mars 2007 à 13:29:45 | Re : Retrouver le hmodule d'une dll

BruNews

Administrateur CodeS-SourceS
DllEntryPoint est autre nom de DllMain.

HINSTANCE thismod;

DllEntryPoint(HINSTANCE hInstance,...)
{
  if(ulReason == DLL_PROCESS_ATTACH) thismod = hInstance;
  return 1;
}


ciao...
BruNews, MVP VC++
vendredi 23 mars 2007 à 14:02:17 | Re : Retrouver le hmodule d'une dll

Mastersam

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.

Voilà tout ce que j'ai fait :

dans le fichier .rc

CP_BGBITMAP BITMAP DISCARDABLE "controlpanel.bmp"

dans le fichier .cpp



BOOL WINAPI DllEntryPoint (HINSTANCE hInstance,ULONG ulReason,LPVOID pv){

    switch (ulReason) {
   
        case DLL_PROCESS_ATTACH:
            g_hInst=hInstance;
           ...
}



LRESULT CALLBACK ControlPanelProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   ...
    case WM_PAINT:
        HDC hdc;
        HDC hdcMemory;
        PAINTSTRUCT ps;

        hdc=BeginPaint(hwnd,&ps); // obtient un handle de contexte de périphérique
      
        BITMAP bm;
        hbitmap=(HBITMAP) LoadImage(g_hInst,MAKEINTRESOURCE(CP_BGBITMAP),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); 
        if(hbitmap!=NULL){
            hdcMemory=CreateCompatibleDC(NULL); 
            SelectObject(hdcMemory,hbitmap);
            GetObject(hbitmap,sizeof(bm),&bm);
            BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hdcMemory,0,0,SRCCOPY);
            DeleteDC(hdcMemory);
        }
      
      ...
}


Et là je n'obtient pas de hbitmap, ma ressource n'est pas trouvée.


vendredi 23 mars 2007 à 14:32:38 | Re : Retrouver le hmodule d'une dll

BruNews

Administrateur CodeS-SourceS
Ne fais pas un LoadImage() à chaque WM_PAINT mais 1 seule fois dans WM_CREATE (ou WM_INITDIALOG).

ciao...
BruNews, MVP VC++
vendredi 23 mars 2007 à 15:28:51 | Re : Retrouver le hmodule d'une dll

Mastersam

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 ?


vendredi 23 mars 2007 à 15:41:14 | Re : Retrouver le hmodule d'une dll

BruNews

Administrateur CodeS-SourceS
Va nickel sur VC++ aussi, preuve ici:
http://www.cppfrance.com/code.aspx?ID=39858

Regarde dans le fichier DlgDll.c

Faut vérifier tes IDs de ressource ou truc de ce genre.

ciao...
BruNews, MVP VC++
vendredi 23 mars 2007 à 21:41:58 | Re : Retrouver le hmodule d'une dll

Mastersam


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.


samedi 24 mars 2007 à 16:33:43 | Re : Retrouver le hmodule d'une dll

Mastersam


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.

A bientôt



1 2

Cette discussion est classée dans : image, dll, retrouver, hmodule, hinst


Répondre à ce message

Sujets en rapport avec ce message

Charger ressource DLL [ par garslouche ] Bonjour à tousJ'ai un curseur dans les resources d'un DLL que je voudrais utiliser dans mon EXE.J'utilise ceci:HMODULE hModule = LoadLibrary("DLLres.d dll qui permet ouvir ds image [ par eryk17 ] qui aurait une dll qui permet douvrir des image en gif , jpeg ou meme plus parce qu'il prend que du bmpmerci dll et boite de dialogue [ par juguivin ] Bonjour.Je me lance dans la conception de dll pour Pixia , logiciel de graphisme; avec Devcmes dll sont bien reconnues et fonctionnent sauf  la boite aide pour une dll [ par baby3378 ] bonjour a tous, voila j'ai trouvé ce code sur cpp, (que je trouve remarquable )mais quand je l'essai sur mon Dev C++ il me di : invalid convertion fro modifier source dll [ par Bestdoud ] Bonjour,J'ai la source d'une dll qui sert à faire marcher une webcam sur le client irc mirc.le seul problème est que cette dll enregistre l'image sur aide pour creer une dll pour traitement d'image [ par mamisco79 ] mamisco bonjour j'ai besoin d'aide pour creer une bibliothèque statique(dll) en c ou c++ avec vc++8 qui comportedes fonctions pour creer une image av recuperer la propriete picture d'une image [ par vbbreizh ] Comment recuperer la propriete picture d'une image affichee dans un prog VB6 et l'exploiter dans une dll en VCPP.La dll utilise l'api drawtext() et l' recuperer la propriete picture d'une image [ par vbbreizh ] Comment recuperer la propriete picture d'une image affichee dans un prog VB6 et l'exploiter dans une dll en VCPP.La dll utilise l'api drawtext() et l' Comment inclure des ressources dans une DLL [ par Kheo ] Je cherche a inclure toutes mes ressources (DIALOGBOX, BITMAP etc .. ) dans une DLL afin de rendre mon soft skinable en changeant de DLL et par conséq image de fond [ par Mike ] Salut,Comment charger une image de fond en visual C++ ( win32 ) d'un objet dialog, j'aimerais simplement mettre une image de fond pour mon dialog ( fo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales