【问题标题】:How to force cdecl calling convention for functions declared in specific header file如何为特定头文件中声明的函数强制 cdecl 调用约定
【发布时间】:2011-03-15 14:14:01
【问题描述】:

嗨 我的 VC2008 项目使用 stdcall 调用约定。我有一个我正在使用的外部库,它是使用 cdecl 命名约定构建的,但是他们没有在函数的函数声明中提及调用约定。

我想知道 VC 是否有某种#pragma 或其他关键字会强制整个头文件的特定调用约定

有点像 extern "C" 技巧,但用于调用约定:

extern "C" 
{
#include <file1.h>
#include <file2.h> 
}

有人知道吗?

【问题讨论】:

    标签: c++ c visual-c++


    【解决方案1】:

    您可以通过以下方式指定调用约定:

    • 什么都不做,你会得到默认的 cdecl。
    • 明确指定__cdecl(或者可能通过宏)。
    • 通过使用 /Gd 编译,选择在整个翻译单元中使用 cdecl。

    没有编译指示或任何类似的东西来控制调用约定。

    【讨论】:

    • 前两个是显而易见的,也是我试图避免的。天知道我要修改多少函数定义。只是为了纠正你,默认不是 cdecl,它是项目设置中设置的任何内容(在我的情况下设置为 stdcall)。
    • 我说的是编译器默认值。如果您更改默认项目设置(也是 cdecl),IDE 会覆盖该默认设置。
    • 我仍在寻找无需修改的解决方案。也许是 Visual Studio 特定的编译指示或类似的东西。
    • @Kostya:不,编译器附带的标准库在其头文件中使用 __cdecl 每个函数。
    • @Kostya 没有编译指示来控制调用约定。
    猜你喜欢
    • 2012-03-17
    • 2023-03-28
    • 2023-03-21
    • 2018-07-11
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    相关资源
    最近更新 更多