c++ visual-studio visual-c++ resources static-libraries

¿Cómo cargar un recurso binario personalizado en una biblioteca estática de VC++ como parte de una DLL?



visual-studio visual-c++ (1)

En el cuadro de diálogo Agregar recurso, haga clic en Importar, seleccione "Todos los archivos ( . )" Para que le permita importar archivos de cualquier tipo y luego seleccione el archivo que desea. Cuando aparezca el cuadro de diálogo Tipo de recurso personalizado, escriba RCDATA en el campo "Tipo de recurso".

Si abre el archivo .rc, verá algo como esto:

///////////////////////////////////////////////////////////////////////////// // // RCDATA // IDR_RCDATA1 RCDATA "myfile.whatever"

y generará resource.h con la siguiente línea:

#define IDR_RCDATA1 101

En código se accede así:

#include "resource.h" #include <windows.h> int main(int argc, char* argv[]) { HRSRC myResource = ::FindResource(NULL, MAKEINTRESOURCE(IDR_RCDATA1), RT_RCDATA); HGLOBAL myResourceData = ::LoadResource(NULL, myResource); void* pMyBinaryData = ::LockResource(myResourceData); return 0; }

donde pMyBinaryData es puntero al primer byte de este ejecutable. Para más información visite las Funciones de Recursos.

Aquí hay un ejemplo de cómo guardaría un recurso binario como este en el disco:

#include "resource.h" #include <windows.h> #include <fstream> int main(int argc, char* argv[]) { HRSRC myResource = ::FindResource(NULL, MAKEINTRESOURCE(IDR_RCDATA1), RT_RCDATA); unsigned int myResourceSize = ::SizeofResource(NULL, myResource); HGLOBAL myResourceData = ::LoadResource(NULL, myResource); void* pMyBinaryData = ::LockResource(myResourceData); std::ofstream f("C://x.bin", std::ios::out | std::ios::binary); f.write((char*)pMyBinaryData, myResourceSize); f.close(); return 0; }

Cuando crea un proyecto con un recurso como ese, este recurso se convertirá en parte de su programa (dll).

Tengo recursos binarios personalizados (cursores animados) que me gustaría almacenar como recursos en una biblioteca estática en Visual Studio C ++. Resulta que los recursos binarios personalizados no serán cargados por :: LoadCursor () o encontrados por :: FindResource () si es un recurso personalizado y en una biblioteca estática.

Esta pregunta da un poco de trabajo alrededor.

Siguiendo sus consejos, si agrego el archivo * .res a un archivo ejecutable como "Propiedad de configuración-> Vinculador-> Dependencia adicional", la biblioteca estática podrá encontrar el recurso.

¡PERO si la biblioteca estática es parte de una dll y la vinculo como una Dependencia Adicional, no se vuelve a encontrar!

¿Cómo puedo vincular los recursos en una dll?

¿O simplemente hacer que el binario se encuentre en la biblioteca estática? Los métodos en la pregunta son bastante engorrosos.