• extern “C” _cdecl __stdcall


    关于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函数声明了。

  • 相关阅读:
    webapi 发布swagger
    如何在发布项目,并发布在iis上
    17.Github分支管理-解决冲突
    18.Git分支管理策略
    15.回撤操作
    16.Github分支管理-创建与合并分支
    14.查看信息深入讲解
    13.git commit深入讲解
    12.add-commit命令深入讲解
    11.几个Git新命令
  • 原文地址:https://www.cnblogs.com/quark/p/2093527.html
Copyright © 2020-2023  润新知