2010-02-08 19 views
8

Wie erstelle ich eine Ressource dll? Die DLL wird eine Reihe von. Png-Dateien haben. In gewisser Weise sollten diese .png-Dateien von der DLL verfügbar gemacht werden. Meine Anwendung müsste diese DLL beziehen, um eine PNG-Datei zu erhalten.Wie erstelle ich eine Ressource dll

Antwort

17

Eine Ressource DLL ist die gleiche wie jede andere DLL, es hat nur wenig oder gar keinen Code und relativ mehr Ressourcen.

Microsoft keine vordefinierte Ressourcentyp für PNG-Dateien, aber Sie können Ihre eigenen

Die minimal mögliche Ressourcen-DLL definieren, ist nur eine kompilierte RC-Datei an den Linker wie diese übergeben.


//save this as resources.rc (supply your own .png file) 

#define RT_PNG 99 

#define ID_DIGG 1 

ID_DIGG RT_PNG "image\\digg.png" 

dann diese Befehle an einer Eingabeaufforderung auszuführen.

rc resources.rc 
link /dll /noentry /machine:x86 resources.res 

Das ist es. Der erste Befehl kompiliert resources.rc in resources.res Der zweite Befehl macht resources.res in eine DLL.

Sie sollten jetzt eine DLL namens resources.dll haben, die eine einzelne PNG-Datei enthält. In der Praxis werden Sie natürlich die #defines in eine Header-Datei setzen, die Sie mit dem Code teilen, der die DLL verwendet.

Um die DLL in C++ zu verwenden, würde Ihr Code in etwa so aussehen.

#define RT_PNG MAKEINTRESOURCE(99) 
#define ID_DIGG MAKEINTRESOURCE(1) 

HMODULE hMod = LoadLibraryEx("resources.dll", NULL, LOAD_LIBRARY_AS_DATAFILE); 
if (NULL != hMod) 
{ 
    HRSRC hRes = FindResource(hMod, RT_PNG, ID_DIGG); 
    if (NULL != hRes) 
    { 
     HGLOBAL hgbl = LoadResource(hMod, hRes) 
     void * pPng = LockResource(hgbl); 
     UINT32 cbPng = SizeofResource(hMod, hRes); 

     // pPng now points to the contents of your your .png file 
     // and cbPng is its size in bytes 

    } 

    // Don't free the library until you are done with pPng 
    // FreeLibrary(hMod); 
} 
+0

wow ... Dank lot..this sieht aus wie eine nützliche Informationen :) –

+0

durch diese Technik verwendet wird, kann ich die meine selbst erstellte IE-Toolbar in Echtzeit auf das Symbol Schaltfläche ändern? – karikari

+1

@ Karikari: Ich denke nicht. Ich kann nicht, wie diese Technik mit Änderungen in Echtzeit hilft. Die Ressourcen in der DLL sind zur Verknüpfungszeit definiert, sie sind nicht dynamisch. –

Verwandte Themen