Icon aus DLL laden



  • Hallo,

    wie bekomme ich ein Icon aus einer DLL heraus? Wenn ich die DLL per LoadLibrary() lade, bekomme ich ein HMODULE Objekt zurück. Aber was mache ich nun mit dem, um mein Icon da herauszubekommen?



  • Schon LoadImage probiert?



  • Ja, mit der Funktion kann ich das Icon dann letztendlich aus der .ico Datei laden, aber ich habe es ja noch gar nicht aus der DLL herausgeholt.
    Um konkret zu werden, in der DLL "url.dll" ist das HTML Seiten Symbol drin und ich möchte es gerne in einem Treeview anzeigen lassen. Nur wie bekomme ich das Icon aus dieser DLL Datei heraus?



  • Bei hinst das Handle der geladenen dll angeben und dann bei lpszName MAKEINTRESOURCE(DEINERESOURCEID)



  • Hmm, also irgendwie komm ich nicht ganz klar. Ich hab folgendes geschrieben:

    HMODULE mod=LoadLibrary("url.dll");
    HICON hIcon=(HICON)LoadImage(mod,MAKEINTRESOURCE(102),IMAGE_ICON,16,16,LR_LOADFROMFILE);
    

    Nur zeigt er ein weißes (also kein) Bild an.
    Die 102 als ID hab ich herausgefunden, indem ich die DLL mit Visual C++ geöffnet habe, in der dem Icon dieser Wert zugewiesen stand. Könnte es daran liegen, dass ich da etwas falsches angebe?



  • Das Flag LR_LOADFROMFILE musst du weglassen, da du ja nicht direkt eine *.ico von der Platte lädst, sondern eine Resource aus der DLL.



  • Hi. Ich hab das jetzt auch mal versucht und bin dabei auf ein Prob gestoßen. Mit LoadImage() wird im 2. Parameter der Index der Icongroup - nicht der des Icons selber - aufgerufen. Das will ich aber! 😉 OK, das habe ich jetzt auch hinbekommen (keine Angst - es gibt dabei auch wieder nen Haken):

    HICON GetIconFromResourceId(HINSTANCE hInst, WORD wID)
    {
       HRSRC    hrsrc;
       DWORD    dwSize;
       HGLOBAL  hGlobal;
       LPVOID   lpv;
    
       hrsrc = FindResource( hInst, MAKEINTRESOURCE(wID), RT_ICON );
       dwSize = SizeofResource(hInst, hrsrc);
       hGlobal = LoadResource(hInst, hrsrc);
       lpv = LockResource(hGlobal);
    
       return CreateIconFromResource((PBYTE)lpv, dwSize, TRUE, 0x00030000);
    }
    

    Wenn ich das Icon nun mit DrawIcon() male, dann hat es - wie alle Icons - die Größe 32x32. Das entsprechende Icon ist aber 16x16 groß. Wie bekomme ich nun heraus, wie groß das Icon in der Resource ist?


Anmelden zum Antworten