DLL 导出 导入 调用约定

导出:

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。

 

posted @ 2011-06-02 20:28  积木  阅读(675)  评论(0编辑  收藏  举报