DLL指的是动态链接库(Dynamic Link Library),它是一个可以被多个应用程序(甚至是不同语言编写的应用程序)同时调用的可执行二进制文件,是一个可共享的库。DLL是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个DLL(服务器)上并由一个或多个客户导出而使用,这些客户可以是应用程序或者是其它的DLL。显然,DLL是VC职业程序员的必修课,因为在开发商业化软件中,总是要将应用程序分成多个模块化DLL,以便于调试、链接和维护。
在VC 6.0中的MFC可以支持三种形式的DLL,包括常规静态DLL、常规动态DLL以及扩展DLL。使用VC 6.0的AppWizard可以创建这三种形式的DLL:点击菜单项"File>New…",在弹出的"New"对话框中激活"Project"栏,在列表框选中"MFC AppWizard(dll)",并输入工程名称和路径信息(如图一);
图一
单击"OK"按钮,弹出"MFC AppWizard-Step 1 of 1"对话框(如图二),
图二
就会看到三个可选圆按钮:"Regular DLL with MFC statically linked"、"Regular DLL using shared MFC DLL"和"MFC Extension DLL(Using shared MFC DLL)"。它们依次对应着三类DLL。常规静态DLL与常规动态DLL的区别是:前者使用的是MFC的静态链接库,生成的DLL文件长度大,一般不使用这种方式,后者使用MFC的动态链接库,生成的DLL文件长度小;动态链接到MFC的常规DLL所有输出的函数应该以如下语句开始(用于正确切换MFC模块状态):
AFX_MANAGE_STATE(AfxGetStaticModuleState( )) |
扩展DLL用来建立MFC的派生类,只被用MFC类库所编写的应用程序调用。常规DLL(包括静态与动态)的一个特点是在源文件里有一个继承CWinApp的类(从CWinApp派生,但没有消息循环),被导出的函数是C++类或者C++成员函数,调用常规DLL的应用程序不必一定是MFC应用程序。扩展DLL和常规DLL不一样,它没有一个从CWinApp继承而来的类的对象,编译器默认了一个DLL入口函数DLLMain()作为对DLL的初始化。