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

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

This question
做一些工作.

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

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

如何链接dll中的资源?

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

解决方法

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

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

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // RCDATA
  4. //
  5.  
  6. IDR_RCDATA1 RCDATA "myfile.whatever"

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

  1. #define IDR_RCDATA1 101

代码中,您可以访问它:

  1. #include "resource.h"
  2. #include <windows.h>
  3.  
  4. int main(int argc,char* argv[])
  5. {
  6. HRSRC myResource = ::FindResource(NULL,MAKEINTRESOURCE(IDR_RCDATA1),RT_RCDATA);
  7. HGLOBAL myResourceData = ::LoadResource(NULL,myResource);
  8. void* pMyBinaryData = ::LockResource(myResourceData);
  9. return 0;
  10. }

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

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

  1. #include "resource.h"
  2. #include <windows.h>
  3. #include <fstream>
  4.  
  5. int main(int argc,RT_RCDATA);
  6. unsigned int myResourceSize = ::SizeofResource(NULL,myResource);
  7. HGLOBAL myResourceData = ::LoadResource(NULL,myResource);
  8. void* pMyBinaryData = ::LockResource(myResourceData);
  9.  
  10. std::ofstream f("C:\\x.bin",std::ios::out | std::ios::binary);
  11. f.write((char*)pMyBinaryData,myResourceSize);
  12. f.close();
  13.  
  14. return 0;
  15. }

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

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