资源dll的制作与使用

来源:互联网 发布:linux 循环打开文件 编辑:程序博客网 时间:2024/05/12 22:32
我使用的IDE是VS2005。

1.制作资源dll

  创建一个win32 DLL的空工程,然后右击项目->“添加”->“资源”。根据自己的需要添加资源。这里我添加一个PNG图片。由于可选项里面没有PNG,所以选择“自定义”,写入PNG,确定。之后选择“PNG”,导入需要的资源。这时,会生成2个文件,resource.h和 .rc文件。打开resource.h就可以看到刚刚加入的PNG资源的ID号了。我的是107。接下来就是生成这个dll。细心的人可能发现,现在这个工程里几乎没有代码,只有一个PNG图片。现在生成dll的话编译器会报错的。右击项目->属性->链接器->高级->无入口点,选择是。现在就可以生成dll了。


2.外部程序引用dll的资源
    HINSTANCE hDll = NULL;      hDll = LoadLibrary("..\\debug\\resdll.dll");      HRSRC hrsrc = NULL;      hrsrc = FindResource( hDll, MAKEINTRESOURCE(107), "PNG" );  


MAKEINTRESOURCE(107)关键是FindResource函数,第一个参数是引用的dll的句柄,由LoadLibrary返回,第二个参数是资源的ID号,可以在resource.h中看到,我之前放入的PNG图片的ID是107。第三个参数就是资源类型。由于我的是自定义的PNG,所以参数是"PNG",如果是本来就有的资源类型比如bitmap就是 RT_BITMAP,但是有例外。如果你使用的是字符串资源,那么 FindResource()的第二个参数则不能直接使用 MAKEINTRESOURCE(nID) 了,应该使用 MAKEINTRESOURCE((nID/16)+1).


以下是另外一些资源的加载方法;

//载入动态链接库  HMODULE hDll=LoadLibrary("PureResDll");      //加载字符串  char buffer[64];  memset(buffer,0,sizeof(buffer));  int nLoad=LoadString(hDll,1,buffer,sizeof(buffer));    //加载菜单  HMENU hMenu=LoadMenu(hDll,MAKEINTRESOURCE(104));      //加载位图  HBITMAP hBmp=LoadBitmap(hDll,MAKEINTRESOURCE(103));      //加载图标  HICON hIcon=LoadIcon(hDll,MAKEINTRESOURCE(102));  


0 0
原创粉丝点击