王冬梅 (河北衡水工业学校 自动化,河北 衡水 053000) [摘 要]介绍Visual C++中纯资源DLL文件的编写与调用,实现了应用程序不同语言界面的支持和字符串数据的输出,该方法方便可行,实用性强。 [关键词]Visual C++ DLL 中图分类号:TP3 文献标识码:B 文章编号:1002—6908(2007)0420 一、引言 动态链接库(Dynamic-Link Library,简写为DLL)是包含了一系列类、函数、变量或其他资源的库文件。它不能单独运行,只能由可执行文件或其他DLL文件调用。在程序中使用DLL的优点是显著的:(1)节省磁盘和内存空间,提高程序执行效率。DLL可以被多个程序同时调用,我们可以把重复使用的功能模块做成DLL文件,对于多任务的Windows操作系统来说这势必会节省磁盘空间和内存的开支。(3)便于多语言开发,模块化设计。DLL的编制与具体的编程和编译器无关,不同语言编定的程序可以共享一个DLL程序,因而,在编写比较复杂的软件时,可由不同的程序员在不同的编程环境下分模块实现。 纯资源DLL就是只包含资源的DLL,其资源可以是字符串、数组、图标、位图、声音、视频或对话框等。 二、用DLL实现程序的不同语言界面 如今,许多软件都支持不同语言的界面,比如:简体中文与繁体中文,简体中文与英文等。如果针对不同语言界面各写一套应用程序,这显然是不现实的。利用纯资源的DLL来实现此功能不失为一种简便有效的方法。下面以在Visual C++中编写支持简体中文与英文界面的程序为例,讲述其实现过程。 (一)纯资源DLL文件的实现 首先,按照简体中文界面完成程序的编写。然后用向导中的Win32 Dynamic—Link Library 建立一个空的DLL工程(取名为ChnRsc)。将所完成的程序的所有资源(包括.rc 、 .rc2 、.ico、.bmp Resource.h等文件)从程序框架中删除,并将其复制到DLL工程的目录下,进而添加到DLL工程的程序框架中。 接下来,对DLL工程作如下设置:从Project菜单中选Settings,选择Link选项,在Project Options文本框中加入/noentry,或者编写一初始化的 .cpp文件加入DLL工程中: # include<windows.h> extern”C” BOOL WINAPI DLLMain(HINSTANCE hinstance,DWORD dwReason,LPVOID Ip Void) {return TRUE; } {zh1},编译生成ChnRsc.dll。 按照同样的方法新建一空的DLL工程(取名为EngRsc),并将所有资源加入到该工程。并将资源中所有简体中文翻译成英文,{zh1}编译生成EngRsc.dll。 (二)纯资源DLL文件的调用 将EngRsc.dll 和 ChnRsc.dll拷贝到应用程序目录或系统目录下。在主应用程序类中加入一受保护的HINSTANCE类型的成员变量 m_hDLL,用来保存加载的DLL的句柄。我们可以将用户选择的语言种类保存到注册表或一初始化文件中,程序启动时自动读取并加载相应的语言资源。在initinstance函数中用如下代码实现: if (nLanguage= =1)//使用简体中文 m_hDLL=LoadLibrary(“ChnRsc.dll”); else m_hDLL=LoadLibrary (“EngRsc.dll”); if (NULL= =m_hDLL) return FALSE; else AfxSetResourceHandle (m_Hdll); 在应用程序退出时要释放加载的资源,所以在ExitInstance中加入如下代码:if (m_hDLL) FreeLibrary (m_hDLL); 这样我们的应用程序就可以支持简体中文和英文两种语言界面了。 三、用DLL输出数据资源 许多应用程序都会用到字符串、数组或声音、视频等资源。如果把资源放入DLL中,需要时由应用程序调用,这样不但可以使主程序变得简洁高效,而且DLL资源可由多个程序同时调用,并且修改或更新资源时不需用对主程序作任何改动。 四、结束语 合理地使用纯资源DLL不仅可以方便地实现某些复杂的功能,还能使应用程序更健壮。笔者通过几个简单实例,对纯资源DLL的编写与应用给予了讨论。希望文中所述方法能起到抛砖引玉的作用,使纯资源DLL的编程在软件开发中发挥更大的作用。 参考文献: [1]伍良生,王新华Windows下的数据采集和A/D转换[J]计算机工程与设计,200223(11):46-47。 [2]周振红,冯夏庭等,VB调用VC创建的Win32 DLL函数[J]。计算机工程2002,28(4)285-286。 |