VC DLL 动态链接库(二)

  DLL 中导出函数的声明有两种:

  1. 在之前给出的在函数声明中加上 __declspec(dllexport), 在这就不再列举了

  2. 采用模块定义(.def) 文件声明, .def 文件为连接器提供了有关被连接程序的的导出, 属性及其他方面的信息

  下面让我们看看怎样用 .def 文件将函数 add 声明为 DLL 导出函数(需在 dllTest 工程中添加 lib.def 文件):

// lib.def
LIBRARY dllTest
EXPORTS add @1

  .def 文件的规则为:

    (1) LIBRARY 语句说明 .def 文件相应的 DLL;

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

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

  由前文可以知道库分为静态库和动态库 DLL,深入到 DLL 内部, 其调用方式也分为静态与动态。

  静态调用方式的特点是由编译系统完成对 DLL 的加载和应用程序结束时 DLL 的卸载, 当调用某 DLL 的应用程序结束时,若系统中还有其他程序使用该 DLL, 则 Windows 对 DLL 的应用记录减一, 知道所有使用该 DLL 的程序都结束时才释放它, 静态调用方式简单实用, 但不如动态调用方式灵活。

转载请注明出处:http://www.cnblogs.com/ygdblogs
原文地址:https://www.cnblogs.com/ygdblogs/p/5382523.html