如何创建资源DLL

时间:2010-02-08 06:39:34

标签: c++

如何创建资源dll?该DLL将具有一组.png文件。在某种程度上,这些.png文件应该从dll中公开。我的应用程序需要引用此dll来获取.png文件。

1 个答案:

答案 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);
}