如何创建资源dll?该DLL将具有一组.png文件。在某种程度上,这些.png文件应该从dll中公开。我的应用程序需要引用此dll来获取.png文件。
答案 0 :(得分:18)
资源dll与任何其他dll相同,它只包含很少或没有代码,并且资源相对较多。
Microsoft没有PNG文件的预定义资源类型,但您可以定义自己的
最小可能的资源dll只是一个像这样传递给链接器的已编译.rc文件。
//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"
然后在命令提示符下执行这些命令。
rc resources.rc
link /dll /noentry /machine:x86 resources.res
多数民众赞成。第一个命令将resources.rc编译为resources.res 第二个命令将resources.res转换为dll。
您现在应该有一个名为resources.dll
的dll,其中包含一个png文件。
当然,在实践中,您需要将#defines
放在与使用dll的代码共享的头文件中。
要在C ++中使用dll,您的代码看起来就像这样。
#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);
}