WEB开发网
开发学院软件开发VC DLL(Dynamic Link Libraries)专题 阅读

DLL(Dynamic Link Libraries)专题

 2008-11-06 19:26:49 来源:WEB开发网   
核心提示: VC++对函数的省缺声明是"__cedcl",将只能被C/C++调用. 关于DLL的函数动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal function),导出函数可以被其它模块调用,DLL(Dynamic Link

VC++对函数的省缺声明是"__cedcl",将只能被C/C++调用.

关于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"函数,

上一页  5 6 7 8 9 10 

Tags:DLL Dynamic Link

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