DLL 导出 导入 调用约定
导出:
extern "C" _declspec(dllexport) : 表示这个函数是DLL导出函数,可以被外部引用。
导出类
AFX_EXT_CLASS
导入:
在应用工程中引用DLL中全局变量的一个更好方法是:
extern int _declspec(dllimport) global; //用_declspec(dllimport)导入
Class _declspec(dllimport) classname 来导入类
调用约定:
1. __stdcall 可让VC 编写的DLL被其他语言编写的程序调用
2. __cdecl C/C++ 调用方式
__stdcall方式与__cdecl对函数名最终生成符号是不同的,而且参数的入栈顺序也不同。
由于不同的调用方式下,可能最终导出的函数名称会有不同的变化(即发生了名字改编),为了防止名字改编,我们还有另一种方式来导出函数方
式(推荐使用) :
3.
用名字定义文件的方式,即增加一个.def文件。
.def文件格式如下:
; Simple.def : 导出DLL函数
LIBRARY Simple
EXPORTS
ShowMessage @ 1
1、注释由“;” 指定,注释不能与语句在同一行。
2、“LIBRARY”语句说明.def文件相应的DLL;
3、“EXPORTS”说明要导出函数的名称。“@ 1”,表示要导出函数的序号为1(在函数调用时,可以用到这个序号)
因此,Simple.def文件的解释是:生成Simple.DLL的动态链接库,其导出ShowMessage函数,该函数的序号为1。