问题1:纯资源DLL是什么? 答: 只包含资源(*.rc 、resource.h 和 主工程Resource Files下面的所有东东 )的DLL。主工程在启动时通过加载这个纯资源DLL来获得所有的资源。而取代传统方式的资源在主题工程之内的形式,以达到减小主工程的体积(EXE文件大小),并实现模块化与语言国际化。 问题2:上个问题中的*.rc 、resource.h 和 主工程Resource Files下面的所有东东 是从哪里来的? 答: 所有的一切,都来自与主工程,并且在主工程中移除这些文件(不是删除),将其加入到纯资源DLL工程。 提示:建议当主工程的所有代码及其功能已经固定,或基本完成(即将release)时,再开始制作相应的纯资源DLL。 补充说明:更深入的研究纯资源DLL,跟帖就好了,嘻嘻嘻嘻~ 找一些相关的资料吧,这里做基础的讲解。 开发环境:WINXP\VS2005\CH(中文) 主体工程完成后,开始制作纯资源DLL: ------------------------------------------------------------------------------------------ (1)新建一个win32->DLL项目,选择默认选项创建即可。 (2)一个崭新的基础DLL框架就有了。 (3)将主体工程中的(a)"源文件"下的 *.rc 添加到DLL工程的"源文件"下 (b)"头文件"下的 resource.h 添加到DLL工程的"头文件"下 (c)"资源文件"下的 所有东东 添加到DLL工程的"资源文件"下 (4)在主体工程中移除上述的文件。(最好不要删除,以备不时之需!) (5)编译一下DLL工程,理论上是不会出错的,只要你的主体工程没有问题。好了,一个纯资源DLL就诞生了!开香槟庆祝一下! (6)这只是一种语言的DLL (7)把*.rc资源中的所有文字(代码除外...)改成英文的,然后编译... 哦也!一个英文版本的DLL产生了! (8)再翻译成德文... 一个德文版本的DLL产生了! (9)... 各种语言版本的DLL产生了... ... (...) (n)已经麻木了... 提示:建议将不同版本的DLL用不同的名字,并且COPY不同的*.rc版本,根据需要换着用,不用新建很多DLL工程。因为只有文字不一样嘛! ------------------------------------------------------------------------------------------- 主体工程修改,以适应新的加载资源方式: ------------------------------------------------------------------------------------------- (1)打开主工程的"类视图",找到那个APP类(C[你的工程名字]App,例如:CabcApp)。 (2)在InitInstance(void)函数里面加入如下代码 //read reg and get selected language EN or CH HKEY hKey; //#define HKEYLANGUAGEPATH "SOFTWARE\\MYPROGRAM" 注册表键路径 //#define HKEYLANGUAGE "Language" 注册表键值名称 RegCloseKey(hKey); if (!LoadLibrary("EnUI.dll")) //EnUI.dll not exist } FreeLibrary(m_hDll);
//here used if..else, you can use switch..case here instead for more different language case. if (DISPLAY_CHINASE == m_language) //CH if (NULL == m_hDll) //...若干代码 FreeLibrary(m_hDll); //此行加在return FALSE之前 至此,DLL已经加载成功了! 然后所有的资源都会自动的关联到主程序,万事大吉!!哦也!!! 编译、调试... 等等... 貌似有些同学出现问题了,有一部分图片、图标没有加载进来?! 别急,如果你的主工程代码中有类似: 编译、生成... 再等等... 主工程生成的EXE怎么没有图标了?!变成白板了... 现在在已经完全移除原有资源的工程里,向"资源文件"中添加图标资源(EXE图标),这时会自动生成新的*.rc等等(一般会是*1.rc 、recources1.h),建议把新生成的这些文件改名(比如*.rc -->ProgramIcon.rc 、resources.h-->ProgramIcon.h )。然后更改rc文件里的"#include "resources.h"--->#include "ProgramIcon.h""。当然不改也一样,只是这样容易让人理解。然后在"资源"视图将刚刚添加的图标改成"IDR_MAINFRAME"名字(我指的是图标ID)。 编译、生成... 于是和以前一样,什么都正常了~ PS: 别忘了将做好的DLL放进主工程的DEBUG目录哦~ 新添加的rc资源不会与DLL中的资源冲突,放心使用吧!当然也可以继续添加比如版本信息等等。 如果发现"资源视图"有显示不正确的现象,关闭VS,重启VS就OK了! OK,再有新的心得时继续发帖! |
|