如何在VC静态库中加载自定义二进制资源作为dll的一部分?

前端之家收集整理的这篇文章主要介绍了如何在VC静态库中加载自定义二进制资源作为dll的一部分?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有自定义二进制资源(动画游标),希望将其作为资源存储在Visual Studio C中的静态库中.事实证明,自定义二进制资源将不会被:: LoadCursor()或由:: FindResource()发现,如果它是一个自定义资源和一个静态库.

This question
做一些工作.

遵循其建议,如果将* .res文件作为“配置属性 – >链接器 – 附加依赖关系”添加到exe中,那么静态库将能够找到该资源.

但是,如果静态库是dll的一部分,并将其作为附加依赖关系将其链接,那么它不会再次被找到!

如何链接dll中的资源?

或者只是使二进制文件在静态库中找到?问题中的方法很麻烦.

解决方法

在“添加资源”对话框中,单击“导入”,选择“所有文件(.)”,以便它可以导入任何类型的文件,然后只需选择所需的文件.当弹出“自定义资源类型”对话框时,键入RCDATA到“资源类型”字段中.

如果您打开.rc文件,您将看到如下:

/////////////////////////////////////////////////////////////////////////////
//
// RCDATA
//

IDR_RCDATA1          RCDATA               "myfile.whatever"

并且它将生成resource.h与以下行:

#define IDR_RCDATA1                  101

代码中,您可以访问它:

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

其中pMyBinaryData是指向此可执行文件的第一个字节的指针.更多信息请访问
Resource Functions

下面是一个例子,您将如何在磁盘上保存这样的二进制资源:

#include "resource.h"
#include <windows.h>
#include <fstream>

int main(int argc,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;
}

当您使用这样的资源构建项目时,此资源将成为您的程序(dll)的一部分.

猜你在找的C&C++相关文章