用VC编写纯资源DLL的方法
发布时间:2016年11月6日 作者:未知 查看次数:1171
用VC编写纯资源DLL的方法 http://www.cnblogs.com/hb_cattle/articles/1663059.html 纯资源 DLL 是仅包含资源(如图标、位图、字符串和对话框)的 DLL。使用纯资源 DLL 是在多个程序之间共享同一组资源的好方法。这种方法也经常用来解决多国语言问题。下面就来介绍下在vs 2005 下如何使用纯资源Dll.
1、新建一个 MFC DLL 项目,设置为 创建规则Dll ,然后打开资源视图,添加一个字符串资源和一个图片资源。然后设置项目属性, 将 配置属性-链接器-高级下的 无入口点选项设为 是(/NOENTRY) , 防止链接器将 _main 引用链接到 DLL 中;此选项是创建纯资源 DLL 所必需的。最后编译项目。 2、再建一个测试项目,把前面 编译的dll拷到项目目录(或将前面的项目添加为引用,这样每次修改了资源dll,不用拷贝)。 代码如下: HMODULE hModule = LoadLibrary("ResourceDll.dll"); if (hModule == NULL) { MessageBox("加载资源文件失败!"); return true; } char buffer[255]; memset(buffer,0,sizeof(buffer)); LoadString(hModule,2000,buffer,sizeof(buffer)); SetDlgItemText(IDC_STATIC,buffer); HBITMAP hBitmap = LoadBitmap(hModule,MAKEINTRESOURCE(2001)); if (hBitmap == NULL) { MessageBox("加载图片资源失败!"); return true; } ((CStatic*)GetDlgItem(IDC_STATIC_BITMAP))->SetBitmap(hBitmap); FreeLibrary(hModule); ======================================================== 以上建立MFC DLL 项目~@~。 http://blog.sina.com.cn/s/blog_6646ef940100n2gi.html 动态链接库(Dynamic—LinkLibrary,简写为DLL)是包含了一系列类、函数、变量或其他资源的库文件。它不能单独运行,只能由可执行文件或其他DLL文件调用。在程序中使用DLL的优点是显著的:(1)节省磁盘和内存空间,提高程序执行效率。DLL可以被多个程序同时调用,我们可以把重复使用的功能模块做成DLL文件,对于多任务的windows操作系统来说这势必会节省磁盘空间和内存的开支。(3)便于多语言开发,模块化设计。DLL的编制与具体的编程和编译器无关,不同语言编定的程序可以共享一个DLL程序,因而,在编写比较复杂的软件时,可由不同的程序员在不同的编程环境下分模块实现。纯资源DLL就是只包含资源的DLL,其资源可以是字符串、数组、图标、位图、声音、视频或对话框等。二、用DLL实现程序的不同语言界面。如今,许多软件都支持不同语言的界面,比如:简体中文与繁体中文,简体中文与英文等。如果针对不同语言界面各写一套应用程序,这显然是不现实的。利用纯资源的DLL来实现此功能不失为一种简便有效的方法。 下面以在VisHalc++中编写支持简体中文与英文界面的程序为例,讲述其实现过程。 (一)纯资源DLL文件的实现 首先,按照简体中文界面完成程序的编写。然后用向导中的win32 Dynamic-Link Library建立一个空的DLL工程(取名为ChnRsc:)。将所完成的程序的所有资源(包括.rc、.rc2、.ico、.bmpResource.h等文件)从程序框架中删除,并将其复制到DLL工程的目录下,进而添加到DLL工程的程序框架中。接下来,对DLL工程作如下设置:从Project菜单中选settings,选择Link选项,在Project Optioils文本框中加入/noentry,或者编写一初始化的.cpp文件加入DLL工程中: 按照同样的方法新建一空的DLL工程(取名为EngRsc:),并将所有资源加入到该工程。并将资源中所有简体中文翻译成英文后编译生成EngRsc:.dll。 (二)纯资源DLL文件的调用 将EngRsc:.d11和ChnRsc:.dn拷贝到应用程序目录或系统目录下。在主应用程序类中加入一受保护的HINsTANC[!类型的成员变量mhDL.L,用来保存加载的DLL的句柄。我们可以将用户选择的语言种类保存到注册表或一初始化文件中,程序启动时自动读取并加载相应的语言资源。在initinstance函数中用如下代码实现: ================================== 其实直接建win32 Dynamic-Link Library工程(VC6++),A simple DLL project,然后将不用的删除,加入自己使用的资源就好了。
|
|
|