如何在VC静态库中加载自定义二进制资源作为dll的一部分?
发布时间:2020-12-16 03:16:32 所属栏目:百科 来源:网络整理
导读:我有自定义二进制资源(动画游标),希望将其作为资源存储在Visual Studio C中的静态库中.事实证明,自定义二进制资源将不会被:: LoadCursor()或由:: FindResource()发现,如果它是一个自定义资源和一个静态库. This question 做一些工作. 遵循其建议,如果将* .re
我有自定义二进制资源(动画游标),希望将其作为资源存储在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是指向此可执行文件的第一个字节的指针.更多信息请访问 下面是一个例子,您将如何在磁盘上保存这样的二进制资源: #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)的一部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |