DLL(Dynamic Link Libraries)全面剖析(4)
2006-04-08 11:40:08 来源:WEB开发网动态链接库中定义有两种函数:导出函数(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" 代码里调用。
- ››Dynamic Multipoint Vpn for IPv6 详解
- ››Linkedin iPhone 3.0应用体验
- ››Dynamic link library for Symbian
- ››DLL(Dynamic Link Libraries)专题
- ››DynamicLayout-VC 6.0对话框动态布局解决方案
- ››link 方法
- ››link-list java版
- ››Links and Anchors: Window 2
- ››DLL文件基本原理及修改方法和通过改DLL来美化系统...
- ››Link Server的语法
- ››DLL头文件的格式和应用
- ››DLL初学者指南(非MFC)
更多精彩
赞助商链接