C++ 如何创建资源dll

C++ 如何创建资源dll,c++,C++,如何创建资源dll?dll将有一组.png文件。在某种程度上,这些.png文件应该从dll中公开。我的应用程序需要引用此dll才能获得.png文件 资源dll与任何其他dll相同,它只有很少或没有代码,而且资源相对较多 Microsoft没有用于PNG文件的预定义资源类型,但您可以定义自己的资源类型 尽可能少的资源dll只是一个编译后的.rc文件,像这样传递给链接器 #define RT_PNG MAKEINTRESOURCE(99) #define ID_DIGG MAKEINTRESO

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

资源dll与任何其他dll相同,它只有很少或没有代码,而且资源相对较多

Microsoft没有用于PNG文件的预定义资源类型,但您可以定义自己的资源类型

尽可能少的资源dll只是一个编译后的.rc文件,像这样传递给链接器

#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);
}


然后在命令提示符下执行这些命令

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

通过使用这种技术,我可以实时更改我自己创建的IE工具栏按钮的图标吗?@karikari:我不这么认为。我不知道这项技术如何帮助进行实时更改。DLL中的资源是在链接时定义的,它们不是动态的。您尝试过Web of Trust浏览器扩展吗?它们有一个IE工具栏图标,可以在运行时更改。我仍然在探索他们的代码,仍然不明白他们是如何做到的。