DLL 导出 导入 调用约定
2011-06-02 20:28
225 查看
导出:
extern "C" _declspec(dllexport) : 表示这个函数是DLL导出函数,可以被外部引用。
导出类 class _declspec(dllexport) classname{...}
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。
extern "C" _declspec(dllexport) : 表示这个函数是DLL导出函数,可以被外部引用。
导出类 class _declspec(dllexport) classname{...}
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。
相关文章推荐
- DLL导出与调用约定
- DLL 导出函数 _stdcall 和 _cdecl调用约定
- DLL中导出函数(函数名及其调用约定)??
- 在你的DLL中,如何导入(导出)一个类,使得其他项目可以调用该类?
- DLL-动态链接库(导入导出符/调用约定)
- 应用程序调用dll组件,及dll组件之间的关系,dll中类及函数的导入导出;dll的导出方式和链接方式分析(一)
- DLL的导出导入与调用
- 显示调用DLL 应该注意DLL导出函数的调用约定问题
- (转)__declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定
- 如何看DLL文件里需要那些导入函数和dll等,导出了什么
- C++编译时函数名修饰约定规则和DLL中导出函数的方法
- Vc调用matlab导出的dll,实现vc与matlab混合编程
- DLL中调用约定和名称修饰(三)
- DLL中调用约定和名称修饰(一)
- dll导入和导出变量或函数
- __declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定
- java中通过jacob调用dts进行数据导入导出
- 在Delphi中静态调用DLL 引用外部Dll External Dll 导入Dll
- DLL中调用约定和名称修饰(二)
- DLL中调用约定和名称修饰(三)