Visual Studio.net 2005中
(1)C++ Project à Win32 Project
(2)选择Application type中的DLL选项,同时选上Additional options中的Empty project。
点击Finish。
然后,为步骤(1)(2)建立的PureResource项目添加资源文件:
(4)DLL分为“带有入口函数” 和 “没有入口函数”两类。
DLL带有入口函数(DLLMain),主要用来执行初始化和清除工作,在DLLMain被首次被装载进进程地址空间和freelibrary的时候被调用,也可能在进程中创建线程和退出线程的时候被使用 。
没有入口函数的DLL,也即该DLL没必要加载至进程(内存)中,而是直接把该DLL”当成”一个文件夹,里面有很多可访问的文件。(纯资源的DLL就没有必要加载到进程中)
如Windows中res://C:/WINDOWS/system32/shdoclc.dll/link.gif(可以用IE直接浏览到link.gif图片)
设置DLL为没有入口函数:
打开PureResource项目的属性设置
Linkerà Advanced à将”No Entry Point”项设置为”Yes(/NOENTRY)”。
(5)添加资源
点击”Import”,
选择文件,如D:/rentaoshu/resPureResourceDLL/PureResource/images/bgImg/xiangxi.JPG,
第一次添加资源时,如果资源类型(Resource type)没有,则会弹出:
在Resource type中输入”images”(上图红色框圈中),
注意:此处必须输入”images”,要跟路径 中的"images" 同名(看完后面就清楚了,COME ON…)
(6)编译PureResource项目,会生成PureResource.dll,将PureResource.dll用工具Resource Hacker打开,会看到:
上图中”IMAGES”即为步骤(5)中,Resource type中输入的”images”,这时,可以通过地址” res://D:/rentaoshu/resPureResourceDLL/PureResource/Release/PureResource.dll/images/101”在IE中看到:
注意红色框中的”images/101”跟Resource Hacker中看到的IMAGES à 101 相对应。
但我们实际图片的路径为D:/rentaoshu/resPureResourceDLL/PureResource/images/bgImg/xiangxi.JPG,我们期望通过在IE中输入“res://D:/rentaoshu/resPureResourceDLL/PureResource/Release/PureResource.dll/images/bgimg/xiangxi.jpg”就能看到上图。而且在我们的应用程序代码中也期望通过“images/bgImg/xiangxi.JPG”来访问xiangxi.JGP,而不是“images/101”。(这时你可能会有疑问:101是怎么出来的?)
(7)解决方案
在Visual Studio.net中打开项目PureResource的资源文件PureResource.rc
其中有一行代码:
IDR_IMAGES1 images "images//bgImg//xiangxi.JPG"
即我们添加的资源图片xiangxi.JPG
同时,打开resource.h,可以看到代码:
#define IDR_IMAGES1 101
这里有个“101”,由此,问题变得简单了。(看出来了吗?)
将“#define IDR_IMAGES1 101” 中的“101”改为“bgImg/xiangxi.JPG”,然后编译PureResource项目,将新生成的PureResource.dll用Resource Hacker打开:
可以看到,之前“101”变为了“BGIMG/XIANGXI.JPG”。
这时在IE中输入如下地址:
“res://D:/rentaoshu/resPureResourceDLL/PureResource/Release/PureResource.dll/images/bgimg/xiangxi.jpg”,出现
OK!大功告成!
注意:有时可能会出现如下现象:
这时,可以在IE中输入本地文件地址“D:/rentaoshu/resPureResourceDLL/PureResource/images/bgImg/xiangxi.JPG”(没有res://) 来验证图片源是否本来在IE中就不可见。