纯资源DLL的编写

纯资源   DLL是仅包含资源(图标,位图,字符串,声音,视频,对话框等)的   DLL。使用纯资源DLL可以节约可执行文件的大小,可以被所有的应用程序所共享,从而提高系统性能。纯资源DLL的编写比普通的DLL要简单的多,使用纯资源   DLL   可用来在多个程序之间共享同一组资源以及对多种语言进行本地化的应用.  
  要创建纯资源   DLL  
  1.   应创建一个新的   Win32   DLL(非   MFC)项目VC6环境中:   File->   New->   Project->   Win32     Dynamic     Link     Library      
  2.   选择an     empty     project.    
  3.   完成后,指定   /NOENTRY   链接器选项,/NOENTRY   防止链接器将   _main   引用链接到   DLL   中;。此选项是创建纯资源   DLL   所必需的       用一下几种方法之一   :  
  a.   在菜单Project->Settings->link中,选中Setting     for的All     configrations;在common   options   中加入     /noentry。      
  b.   在工程的属性页-链接器-高级-资源仅限于DLL中选择”是   (/NOENTRY)”)。  
  c.   VC++6.0   Project   ->Setting   ->link:选中Setting     for   的   Win32   Debug   并在   progectOptions   中加入   /noentry;    
  4.   创建一个资源文件   *.RC,添加到资源DLL的工程中去  
  5.   创建所需资源:  
  创建一个字符串资源,为IDS_STRING101   其值为101   内容为TEST。  
  创建一个图标资源,ID为IDI_ICON1  
  6.   然后添加一个初始化DLL的原文件。  
  #include   <windows.h>  
   
  extern   “C”  
  BOOL   WINAPI   DllMain(   HINSTANCE   hInstance,   DWORD   dwReason,   LPVOID   )  
  {  
          return   1;  
  }  
  7.   编译生成   DLL。  
  使用纯资源   DLL  
  使用纯资源   DLL   的应用程序应调用   LoadLibrary   来显式链接到   DLL。若要访问资源,请调用一般函数   FindResource   和   LoadResource,这两个函数对任何类型的资源都有效,或调用下列资源特定的函数之一:    
   
  FormatMessage    
  LoadAccelerators    
  LoadBitmap    
  LoadCursor    
  LoadIcon    
  LoadMenu    
  LoadString    
   
  对于象对话框、位图、图标这些标准资源,一般不使用FindResource,只有对于非标准资源,才使用FindResource()  
  使用完资源后,应用程序应调用   FreeLibrary。  
   

在MFC程序中你还可以直接使用AfxSetResourceHandle将它设置为缺省的资源句柄
然后使用MFC的String,BitMap像往常一样Load就可以了


  [使用例子]  
  对于刚才创建的字符串和图标资源,我们使用下面方法来使用字符串资源和图标资源:  

[cpp]   view plain copy
  1. //首先在相应的.h文件中设定    
  2. #define   IDS_STRING101   101    
  3. #define   IDI_ICON1   102    
  4.    
  5. //装载资源    
  6. HINSTANCE   hDll;    
  7. hDll   =   LoadLibrary(”ResourceDll.dll”);    
  8.    
  9. //使用字符串资源    
  10. char   strRes[MAX_PATH];    
  11. LoadString(hDll,IDS_STRING101,strRes,MAX_PATH);    
  12. AfxMessageBox(strRes);    
  13.    
  14. //使用图标资源    
  15. AfxSetResourceHandle(hDll);    
  16. HICON   hIcon   =   ::LoadIcon(hDll,MAKEINTRESOURCE(IDI_ICON1));    
  17.    
  18. //使用对话框    
  19. 1、如果采用MFC方式,可以使用AfxSetResourceHandle设置资源DLL的句柄,如:      
  20.           hDll=LoadLibrary(”ResourceDLL.dll”);      
  21.           if(hDll==NULL)      
  22.           AfxMessageBox(”Can’t   Load   the   library”);      
  23.           else   AfxMessageBox(”success”);      
  24.           AfxSetResourceHandle(hDLL);      
  25.           …      
  26.         }      
  27. 这样以后你再使用CDialog创建对话框时,对话框将来自你的资源DLL,而不是.exe文件。如果你在程序中还要使用.exe中的资源,你需要在   AfxSetResourceHandle之前,先使用   AfxGetResourceHandle保存当前的资源文件句柄。      
  28.         2、SDK方式。你在调用CreateDialog或DialogBox时,它们的第一个参数都是HINSTANCE,就是你LoadLibrary获得的句柄。你不需要使用FindResource,CreateDialog或DialogBox会自动查找资源并加载。      
  29. //释放资源    
  30. FreeLibrary(hDll);  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值