2010-02-08 29 views
8

¿Cómo creo un recurso dll? El dll tendrá un conjunto de archivos .png. De alguna manera, estos archivos .png deberían estar expuestos desde el dll. Mi aplicación necesitaría referir esta dll para obtener un archivo .png.¿Cómo creo un recurso dll

Respuesta

17

Un dll de recurso es el mismo que cualquier otro dll, simplemente tiene poco o ningún código y relativamente más recursos.

Microsoft no tiene un tipo de recurso predefinido para los archivos PNG, pero se puede definir su propio

la DLL de recursos más mínimo posible es simplemente un archivo .rc compilado pasado al enlazador como este.


//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" 

luego ejecutar estos comandos en un símbolo del sistema.

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

Eso es todo. el primer comando compila resources.rc en resources.res el segundo comando convierte resources.res en un dll.

Ahora debería tener un dll llamado resources.dll que contiene un único archivo png. En la práctica, por supuesto, querrá poner el #defines en un archivo de encabezado que comparta con el código que usa el dll.

Para usar el dll en C++, su código sería algo como esto.

#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 ... gracias lot..this se parece a una información útil :) –

+0

mediante el uso de esta técnica, puedo cambiar el icono de creación propia IE del botón de mi barra de herramientas en tiempo real? – karikari

+1

@karikari: No lo creo. No puedo cómo esta técnica ayuda con los cambios de tiempo real. Los recursos en el DLL se definen en el momento del enlace, no son dinámicos. –

Cuestiones relacionadas