CSDN博客

img overflow

dll中函数定义的关键词

发表于2004/7/8 11:20:00  497人阅读

1、extern "C" 是用来告诉编译器,以C的方式来命名,而不要以C++ 的命名法,因为C++ 的命名法会在函式名称後加上参数型态等装饰字,如此会造成其他程式如VC++,VB等无法使用的困扰。

2、__declspec关键字,它可以传入dllimport及dllexport两个参数,用来分别代表输入函数及输出函数。输出函数,必须使用 __declspec(dllexport) 来定义该函数,反之若你要使用输入函数,则你必须使用 __declspec(dllimport) 来定义该函数。

3、Calling Convention

The calling convention options determine the order in which arguments passed to functions are pushed onto the stack; which function, calling or called, removes the arguments from the stack; and the name-decorating convention that the compiler uses to identify individual functions。

/Gd __cdecl Specifies the C calling convention for all functions that are not C++ member functions or are not marked as __stdcall or __fastcall. This is the default setting.
/Gr __fastcall Specifies the __fastcall calling convention for all functions that are not C++ member functions or are not marked as __cdecl or __stdcall. All __fastcall functions must have prototypes.
/Gz __stdcall Specifies the __stdcall calling convention for all prototyped C functions that do not take a variable number of arguments and are not marked as __cdecl or __fastcall. All __stdcall functions must have prototypes.

_stdcall将参数压栈是按C语言的顺序(从右到左),但与C 语言不同的是它是由被调用者将参数从栈中清除的,所以它的编译文件比_cdecl小。_stdcall是Windows API函数中默认的调用约定,VB、VFP等也采用这个约定。
    _cdecl是C语言采用的默认调用方法,它的优点是支持printf这样的可变参数调用。
    另外,VC++对于两种调用方法的名称转换方法也不同

例子:

声明函数

 extern "C" __declspec(dllexport) 函数类型 __cdecl 函数名(函数参数);

实现函数:

  __declspec(dllexport) 函数类型 __cdecl 函数名(函数参数)

0 0

相关博文

我的热门文章

img
取 消
img