当前位置:首页 > 资讯 > info5 > 正文

调用约定

发表于: 2014-08-11   作者:poiiy333   来源:转载   浏览次数:
摘要: 关于C++动态库导出API相关的这几个关键字,一直困扰了许久,每次在调用C++动态库接口函数的时候,我都不得不花一些时间去“试”。但是用过之后就忘了……首先解释一下_cdecl和__stdcall所代表的意义:Cdecl:调用方清理堆栈。这使您能够调用具有varargs的函数(如Printf),使之可用于接受可变数目的参数的方法;StdCall:被调用方清理堆栈。这是使用平台invoke调用非托管

关于C++动态库导出API相关的这几个关键字,一直困扰了许久,每次在调用C++动态库接口函数的时候,我都不得不花一些时间去“试”。但是用过之后就忘了……

首先解释一下 _cdecl 和 __stdcall所代表的意义:

Cdecl:调用方清理堆栈。这使您能够调用具有 varargs 的函数(如 Printf),使之可用于接受可变数目的参数的方法;

StdCall:被调用方清理堆栈。这是使用平台 invoke 调用非托管函数的默认约定。

我花了一些时间专门对以上这个关键字做了一些测试。结果如下(没有使用def文件):

API函数声明:

__declspec(dllexport) void  MyMethod();

导出符号:

?MyMethod@@YAXXZ

API函数声明:

extern  "C"  __declspec(dllexport) void  MyMethod();

导出符号:

MyMethod

API函数声明:

__declspec(dllexport) void  __stdcall MyMethod();

导出符号:

?MyMethod@@YGXXZ

API函数声明:(这种情况比较特殊)

extern  "C"  __declspec(dllexport) void  __stdcall MyMethod();

导出符号:

_MyMethod@0

 

API函数声明:

__declspec(dllexport) void  _cdecl MyMethod()

导出符号:

?MyMethod@@YAXXZ

API函数声明:

extern  "C"  __declspec(dllexport) void  _cdecl MyMethod();

导出符号:

MyMethod

通过以上很容易知道该如何使用API函数声明了。

调用约定

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
函数调用约定和堆栈 1 什么是堆栈 编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入
http://zh.wikipedia.org/wiki/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A 这里描述了在x86芯片架构
int bar( int a, int b, int c, int d, int e, int f, int g ) { int array2[ 7 ]; array2[ 0 ] = a
  _cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些
最近在写一些字符串函数的优化,用到x64汇编,我也是第一次接触,故跟大家分享一下。 x86:又名 x32
小议三种函数调用约定 __cdecl、__stdcall、__fastcall是C/C++里中经常见到的三种函数调用方式。其
1.示例 栈的作用和功能这里就不再叙述了。 先看一个最简单的函数调用例子: #include "stdafx.h" in
1,常量约定: /*** * http的请求方式:GET */ public static final String HTTP_REQUESTMETHOD_GET="G
1,常量约定: /*** * http的请求方式:GET */ public static final String HTTP_REQUESTMETHOD_GET="G
1,常量约定: /*** * http的请求方式:GET */ public static final String HTTP_REQUESTMETHOD_GET="G
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号