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

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

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

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

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

函数的定义声明 用法 形参实参 return关键字

day08 函数 什么是函数 :函数就是一段特殊功能的代码 函数 定义 的语法函数必须写在main函数的外面 格式eg: 数据类型 函数名称(参数列表) { ...
  • lidian6864677
  • lidian6864677
  • 2016年08月02日 22:58
  • 964

导出dll的函数定义

导出dll的函数定义
  • loveheronly
  • loveheronly
  • 2014年09月22日 22:30
  • 994

dll导出函数定义规范

#ifndef _CITICS_KCBPCLI2_H #define _CITICS_KCBPCLI2_H #ifdef WIN32 #ifdef CITICS_KCBPCLI_EXPORT...
  • DJKFJK
  • DJKFJK
  • 2013年08月10日 13:53
  • 929

DLL 导出函数 _stdcall 和 _cdecl调用约定

—— 关于 DLL 在 VB 中调用的一些细节          (VS 2005 编译器)
  • hb19820102
  • hb19820102
  • 2012年04月06日 16:03
  • 3292

lucene 获取分词后的关键词

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

设计一个脚本,根据关键字提取整段话中关键字所在的句子

关键字 提取 寻找
  • yanggenye
  • yanggenye
  • 2017年05月05日 17:19
  • 877

vim查看函数定义的方法

1.系统函数 SHIFT+K 2.自定义函数 (首先,确保你安装了ctags) 用ctags -R生成一个叫做tags的文件 进入vi,输入类似如下的指令,tags=后面为刚才生成的ta...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2013年12月27日 18:52
  • 5388

[DLL劫持] 1 DLL劫持之DLL基础(1)

该系列文章是依据本人平时对动态链接库的学习,归纳总结,所做的学习笔记。如有错误或待改善之处,请留下您宝贵的意见或建议。   最近在研究逆向工程的相关知识,主要用到的是C++逆向,工具有IDA和OL...
  • u010311064
  • u010311064
  • 2014年06月29日 16:04
  • 1937
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:dll中函数定义的关键词
举报原因:
原因补充:

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