创建动态链接库 Visual C++的工程窗口中提供了创建动态链接库的选项,用户可以选择该选项来创建一个动态链接库工程。具体步骤如下: (1)单击“File/New”菜单项,打开“New”窗口,选择“Projects”选项卡,如图1所示。 图1 新建工程窗口 (2)在列表中选择“Win32 Dynamic Link Library”选项,表示创建动态链接库工程,在“Project name”编辑框中输入工程名称。单击“OK”按钮进入向导窗口,如图2所示。 图2 Dll向导窗口 (3)在向导窗口中选择“A simple DLL project”选项,单击“Finish”按钮完成工程的创建。 (4)向工程中添加一个头文件,名称为“ShowDlg.h”。 (5)在头文件ShowDlg.h中定义动态链接库的导出函数。 #include "stdafx.h" #define EXPORT __declspec(dllexport) //定义一个宏 extern "C" EXPORT void ShowDialog(char* pText); //定义导出函数 说明:为了将动态链接库中的函数导出,在导出函数前,需要使用__declspec(dllexport)关键字。extern “C”用于防止C++编译器对函数名进行命名改编。由于C++语言支持函数重载,因此C++编译器在编译动态链接库时,会对导出函数进行命名改编。使用extern “C”有许多限制,例如,当函数的调用约定改变时,依然会发生命名改编的情况,稍后将会介绍该情况,并介绍其解决方法。 (6)在动态库的源文件中定义ShowDialog函数。 void ShowDialog(char* pText) { MessageBox(NULL,pText,"提示",0); } (7)运行程序,将生成一个动态链接库文件,扩展名为“.dll”。使用“Depends”工具打开生成的动态链接库,如图3所示。 图3 查看动态链接库 如果修改动态链接库中的ShowDialog方法,改变其默认的调用约定,例如使用__stdcall调用约定,动态库中的函数将发生命名改变。修改ShowDlg.h头文件中的函数声明。 #include "stdafx.h" #define EXPORT __declspec(dllexport) //定义宏 extern "C" EXPORT void __stdcall ShowDialog(char* pText); //改变函数的调用约定 修改动态链接库源文件中的函数定义。 void __stdcall ShowDialog(char* pText) //改变函数调用约定 { MessageBox(NULL,pText,"提示",0); //弹出提示信息 } 重新编译/运行程序,查看动态链接库中的函数信息,发现函数名不再是ShowDialog,如图4所示。 图4 观察动态链接库 由于__stdcall是一种比较流行的函数调用约定,为了防止发生函数命名改编的情况,可以定义一个.def文件,其中加入EXPORTS节,设置导出函数名,如图5所示。 图5 设置DEF文件 将设置的.def文件添加到动态链接库工程中,重新运行应用程序,发现函数没有发生命名改编,如图3所示。