要创建DLL,必须至少创建三个文档。

1 .cpp文件用于编写核心代码。

里面包括一个dll入口函数DllMain。形如:

包括需要导出的变量和函数,图中的是add。以及不需要导出的变量和函数。

2 .h文件用于供其他程序调用使用。

最好包括如下内容:

3 .def文件,用于为链接器提供有关被链接程序的导出、属性及其他方面的信息。为了导出所需函数。

如图:

.def文件的规则为:

(1)LIBRARY语句说明.def文件相应的DLL,可以省略;

(2)EXPORTS语句后列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n;

(3).def 文件中的注释由每个注释行开始处的分号 (;) 指定,且注释不能与语句共享一行。

可以看出,DLL中导出函数的声明有两种方式:

一种方式是:在函数声明中加上__declspec(dllexport);

另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。

这两种方式分别对应上面的2和3,笔者建议这两个文件全部建立。

二编译后生成三个有用的文件:

  • 1.dll文件就是动态链接库
  • 2.lib文件就是供程序开发用的导入库,它为系统提供了加载这个dll和定位dll中的导出函数所需的信息。
  • 3.h文件包含了导出函数的声明

三使用dll有两种途径

1装载期间动态链接。这时候需要用到全部三个有用文件。最好将他们都放入你的工程目录。

在调用时必须要用到两个语句,他们是:

#include “.h”有用文件

#pragma comment(lib, “.lib”有用文件)

之后就可以像使用本地函数一样使用.dll中的导出函数了。请看下面的例子:

2运行期间动态链接。这时候只需要用到.dll文件。你需要记录它的文件目录中的地址。

这时你需要用到三个函数:

用于加载库的:库handle = LoadLibrary("dll文件的目录地址");

用于加载函数:函数指针 = GetProcAddress(库handle, "函数名");

用于释放库的:FreeLibrary(库handle);

在加载函数指针后就可以使用这个函数了。请看下面的例子:

相关推荐