dll中函数定义的关键词

转载 2004年07月08日 11:20:00

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 函数名(函数参数)

如何查看DLL的函数声明

如何查看DLL的函数声明 2007-08-28 09:23 转贴自:http://blog.csdn.net/uvbs/archive/2006/01/27/589346.aspx De...
  • zerokkqq
  • zerokkqq
  • 2011-05-11 10:53:00
  • 7379

总结一下DLL函数声明的一些问题

有关DLL的问题很多,很多人写DLL时经常出现调用程序无法找到相关的导出函数的问题,其实主要的原因是DLL在声明时出的问题。  在这里主要有两个问题,一个是调用约定的问题,一个是函数名修饰的问题,而...
  • wangwenjing90
  • wangwenjing90
  • 2013-06-07 15:29:12
  • 5846

dll exe ocx查看器

  • 2012年11月25日 14:37
  • 753KB
  • 下载

如何查看DLL文件的导出函数声明

http://blog.csdn.net/uvbs/archive/2006/01/27/589346.aspx Depends.exe 是 Visual C++ 自带的一个工具。它可能是我们经常...
  • adi_1987
  • adi_1987
  • 2016-12-05 14:49:49
  • 1119

VC中编写DLL的函数声明问题

http://blog.csdn.net/jamestaosh/article/details/4237757 编写动态链接库时,注意:::  4.5 __stdcall约定 ...
  • ruihaha
  • ruihaha
  • 2015-09-06 10:06:02
  • 959

API查询器-VB使用

  • 2014年03月31日 11:53
  • 573KB
  • 下载

lucene 获取分词后的关键词

使用不同的分词器, 最后得到的关键词不同, 需要的时间也不同 需要中文分词是, 用IKAnalyzer是不错的选择, 但相比时间, 我的电脑上大概分词需要800+ms 分词器工作流程: ...
  • Ping_QC
  • Ping_QC
  • 2012-04-11 10:05:41
  • 4395

dll导出函数定义规范

#ifndef _CITICS_KCBPCLI2_H #define _CITICS_KCBPCLI2_H #ifdef WIN32 #ifdef CITICS_KCBPCLI_EXPORT...
  • DJKFJK
  • DJKFJK
  • 2013-08-10 13:53:33
  • 962

导出dll的函数定义

导出dll的函数定义
  • loveheronly
  • loveheronly
  • 2014-09-22 22:30:28
  • 1003

MFC DLL 一个方便的导出函数宏定义

当然,可以自己定义宏,不过其实mfc已经帮我们做了 导出类的时候直接用这个AFX_EXT_CLASS 就ok了 class AFX_EXT_CLASS CMyDlg : public CD...
  • tajon1226
  • tajon1226
  • 2017-02-15 10:50:31
  • 1218
收藏助手
不良信息举报
您举报文章:dll中函数定义的关键词
举报原因:
原因补充:

(最多只允许输入30个字)