WEB开发网
开发学院软件开发VC DLL(Dynamic Link Libraries)全面剖析(4) 阅读

DLL(Dynamic Link Libraries)全面剖析(4)

 2006-04-08 11:40:08 来源:WEB开发网   
核心提示: 关于DLL的函数 动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal function),导出函数可以被其它模块调用,DLL(Dynamic Link Libraries)全面剖析(4),内部函数在定义它们的DLL程序内部使用,输出函数的方法有以下几种:1、传统的方法在
关于DLL的函数

动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal function)。导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。

输出函数的方法有以下几种:

1、传统的方法

在模块定义文件的 EXPORT 部分指定要输入的函数或者变量。语法格式如下:

entryname[=internalname] [@ordinal[NONAME]] [DATA] [PRIVATE]

其中:

entryname 是输出的函数或者数据被引用的名称;
internalname 同 entryname;
@ordinal 表示在输出表中的顺序号(index);
NONAME 仅仅在按顺序号输出时被使用(不使用 entryname );
DATA 表示输出的是数据项,使用 DLL 输出数据的程序必须声明该数据项为 _declspec(DLLimport)。

上述各项中,只有 entryname 项是必须的,其他可以省略。

对于"C"函数来说,entryname 可以等同于函数名;但是对 "C++" 函数(成员函数、非成员函数)来说,entryname 是修饰名。可以从 .map 映像文件中得到要输出函数的修饰名,或者使用DUMPBIN /SYMBOLS 得到,然后把它们写在 .def 文件的输出模块。DUMPBIN 是VC提供的一个工具。

如果要输出一个 "C++" 类,则把要输出的数据和成员的修饰名都写入 .def 模块定义文件。

2、在命令行输出

对链接程序 LINK 指定 /EXPORT 命令行参数,输出有关函数。

3、使用 MFC 提供的修饰符号 _declspec(DLLexport)

在要输出的函数、类、数据的声明前加上 _declspec(DLLexport) 修饰符表示输出。__declspec(DLLexport) 在 C 调用约定、C 编译情况下可以去掉输出函数名的下划线前缀。extern "C" 使得在 C++ 中使用 C 编译方式成为可能。在"C++"下定义"C"函数需要加 extern "C" 关键词。用 extern "C" 来指明该函数使用 C 编译方式。输出的 "C" 函数可以从 "C" 代码里调用。

1 2  下一页

Tags:DLL Dynamic Link

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接