特殊说明:版权归个人所有,请勿转载,谢谢合作。
DLL的创建过程非常简单,以实现计算器的加、减、乘和除的功能为例,只提供算法部分。
在VC6中,点击【File】菜单中的【New…】项,在弹出的新建界面中,选择【Win32 Dynamic-Link Library】项,并输入项目名称(以“Calc为例”),点击【OK】按钮确认操作,如图12.1所示。
- 图12.1 DLL新建界面
在向导的第一步,选择【A simple DLL project.】项,创建一个简单的DLL项目内容,并点击【Finish】按钮确认选择,如图12.2所示。
- 图12.2 DLL创建模式选择
工程创建完成后,系统会自动生成入口函数,如图12.3所示。
- 图12.3 DLL创建完成
在入口函数下面直接实现计算器算法函数,如下所示。
// Calc.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } //----------------------------------------------------------------------------- // FUNC : 加法 //----------------------------------------------------------------------------- // INPUT : nOp1,操作数1; // nOp2,操作数2。 // OUTPUT : NULL // RETURN : VOID // AUTHOR : 2012-8-7 14:45 Create by lixinghua for functions. // NOTE : 实现加法操作。 //----------------------------------------------------------------------------- // int MyAdd(int nOp1, int nOp2) { return nOp1 + nOp2; } //----------------------------------------------------------------------------- // FUNC : 减法 //----------------------------------------------------------------------------- // INPUT : nOp1,操作数1; // nOp2,操作数2。 // OUTPUT : NULL // RETURN : VOID // AUTHOR : 2012-8-7 14:46 Create by lixinghua for functions. // NOTE : 实现减法操作。 //----------------------------------------------------------------------------- // int MyDec(int nOp1, int nOp2) { return nOp1 - nOp2; } //----------------------------------------------------------------------------- // FUNC : 乘法 //----------------------------------------------------------------------------- // INPUT : nOp1,操作数1; // nOp2,操作数2。 // OUTPUT : NULL // RETURN : VOID // AUTHOR : 2012-8-7 14:46 Create by lixinghua for functions. // NOTE : 实现乘法操作。 //----------------------------------------------------------------------------- // int MyMul(int nOp1, int nOp2) { return nOp1 * nOp2; } //----------------------------------------------------------------------------- // FUNC : 除法 //----------------------------------------------------------------------------- // INPUT : nOp1,操作数1; // nOp2,操作数2。 // OUTPUT : NULL // RETURN : VOID // AUTHOR : 2012-8-7 14:46 Create by lixinghua for functions. // NOTE : 实现除法操作。 //----------------------------------------------------------------------------- // int MyDiv(int nOp1, int nOp2) { return nOp1 / nOp2; }
到目前为止,需要简单的计算器算法已经实现,但不能直接使用,需要创建DEF文件作为DLL文件的对外接口声明。点击【File】菜单,以【New…】项,在新建窗口中选择【Text File】项,并在【File】处输入文件名(以DllExoprt.DEF为例),需要注意的是建立的文件需要加入扩展名“.DEF”,如图12.4所示。
- 图12.4 创建DEF文件
创建完DEF文件后,需要在文件加入引出的函数接口,如图12.5所示。
- 图12.5 DEF导出接口声明
此时重新编译程序,编译完成后,可以使用VC6自带的工具,查看导出的函数接口名称,在【开始】菜单中的【所有程序】中查找VC6的安装菜单项,选择VC6的工具【Microsoft Visual Studio 6.0 Tools】中的【Depends】,如图12.6所示。
- 图12.6 打开Depends工具
在Depends工具中打开在Debug目录下生成的动态库文件(本例为“Calc.dll”),即可以查看到相应的接口,如图12.7所示。
- 图12.7 导出接口
到目前为止,一个动态库创建完成。虽然只实现了简单的加、减、乘和除的操作,但所有动态库的创建方法基本相同,唯一不同的就是更换里面实现具体的功能的函数。在DLL中,本例不需要额外开辟或释放空间,所以入口函数不需要做任何操作。虽然入口函数没有用到,但不能删除,它毕竟是入口与出口的地方,没有了它DLL将是不成立的。