问题标签 [cdecl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4705 浏览

linux - 使用 Steinberg VST SDK 的 g++ cdecl 调用约定

据我研究,我看到 GNU C 默认使用 cdecl 进行函数调用。使用 GNU C 编译时,VST SDK 将调用显式定义为 cdecl,并显示以下错误:

同时,当我删除显式定义 __cdecl 并让编译器决定时,它编译时没有任何问题。这不应该抛出同样的错误,因为默认是 cdecl 吗?

我在 Wikipedia 上读到,对于 cdecl,“从 GCC 版本 4.5 开始,调用函数时堆栈必须与 16 字节边界对齐(以前的版本只需要 4 字节对齐。)”这是否应该提供我的问题的洞察力和可能的原因?

当我将其定义为 __fastcall 或 __stdcall 时,我也面临同样的错误。那么这里到底发生了什么?

0 投票
1 回答
224 浏览

objective-c - 当 Apple 文档提到包含 ARC 属性的正确位置时,它是什么意思?

在转换(没有双关语)以澄清何时在变量声明中使用时,我在Transitioning to ARC Release Notes__strong中遇到了这些行:

你应该正确地装饰变量。在对象变量声明中使用限定符时,正确的格式是:

例如:

其他变体在技术上是不正确的,但被编译器“原谅”了。要了解该问题,请参阅http://cdecl.org/

我怀疑这是苹果公司的某种玩笑,但我想我不明白。这显然没关系,但我想把它做好。正确“装饰”变量声明的重要性是什么,cdecl.org 试图说明什么?

编辑:澄清一下,我想准确理解为什么写作

是“技术上不正确的”。

0 投票
1 回答
639 浏览

visual-studio-2010 - VS2010升级后无法链接到lib(__cdecl vs __thiscall?)

非常感谢任何帮助,我的前额被擦伤了。

我们有一个大的开源DICOM库 ( dcmtk),我们将其用作静态库。它是非托管 C++,我们从C++ DLL包装它的托管链接到它。它使用 CMake 来调整各种平台的构建指令。迁移到VS2010(从 2008 年开始)破坏了我们的构建,因此我们也借此机会更新了我们正在使用的库版本(应该更VS2010友好)。在对 lib 进行了一些修改之后,现在构建(给出或接受关于类型转换的无数警告)。但是现在使用它的代码不会链接到它。它引发了一堆未解决的外部符号错误。

它找到了库 OK(如果我更改了 lib 文件名,它会在前面使用适当的 msg 时出错)。

如果我使用 DUMPBIN 反汇编 lib 文件,我会看到相应的标记,例如:... 000000000000000E: C3 ret

??1OFString@@QEAA@XZ (public: __cdecl OFString::~OFString(void))

但链接器没有找到它:

我一直在研究这是__cdecl vs. __thiscall不匹配的理论,但无法让 VS 使用任何其他约定来构建库。(具有讽刺意味的是,2008 年的旧版本emit __thiscall似乎是用我认为的 /Gd 选项编译的forces __cdecl)。

有什么见解吗?

0 投票
2 回答
4791 浏览

c++ - 为什么我不应该使用 __fastcall 而不是标准的 __cdecl?

我会听一些人说它比其他调用__fastcall更快__cdecl__stdcall因为它将两个参数放入寄存器,而不是其他调用之一;但是,另一方面,这不是 C 中使用的标准。

我想知道是什么让__fastcallC 中的标准变得不受欢迎,以及何时在我的代码中使用它。

0 投票
0 回答
431 浏览

c++ - Windows 窗体应用程序中的 _beginthread 实现

我尝试在 Windows 窗体应用程序中使用简单的 _beginthread 函数创建线程(我通过制作控制台应用程序成功地做到了。

我的错误(和警告)是:

c:\users\artur\desktop\clock\thread_clock\thread_clock\Form1.h(117): warning C4441: calling convention of '__cdecl ' ignored; '__clrcall ' used instead 1>c:\users\artur\desktop\clock\thread_clock\thread_clock\Form1.h(128): error C2664: '_beginthread' : cannot convert parameter 1 from 'void' to 'void (__cdecl *)(void *)' 1> Expressions of type void cannot be converted to other types

如何防止这种情况?

0 投票
2 回答
2119 浏览

dll - Dumpbin 显示奇怪的方法名称(在 MS Visual C++ 中生成导出函数)

我在我的 VS 中创建了新的 Win32 项目,并为此目的选择了动态库 ( *.dll )。

我在主文件中定义了一些导出函数:

当我查看转储/出口时,我得到了:

我正在调用 C# 版本,如下所示:

这不是使用导出方法的正确形式。我在哪里为 C++ dll 项目中的导出方法生成这样的名称失败了?

0 投票
1 回答
1164 浏览

c++ - 将函数分配给具有相同签名但不同调用约定的 std::function 失败

以下使用 mingw 4.7.2 和 -m64 标志编译并运行得很好。

但使用 -m32 或任何 mingw 32 位版本无法编译。是错误还是我缺少编译器标志?

错误信息:

在将调用“隐藏”在 lambda 函数中之后,我最终这样做了,它工作得很好:

0 投票
1 回答
1508 浏览

c++ - 用于解析 C 类型声明的库?

我正在尝试找到一个开源库(用C或编写C++)来帮助我解析任意C/C++类型声明(例如声明,如void *(*(*foo[])( int, void * [] ))[123]),然后我将使用元模型。

有人可以推荐一个开源C/C++类型声明解析库吗?

注意:我不能使用 GPL 许可代码(如该cdecl工具),因为这是用于封闭源代码的应用程序,我希望为我自己编写的内容提供更强大的解决方案。

0 投票
3 回答
1388 浏览

assembly - 汇编语言 - 调用约定

有人可以给我一些真实的例子来帮助我理解汇编语言中的被调用者和调用者是什么?我已经通过了大多数来源,但我仍然无法区分被调用者和调用者。先感谢您。(我正在添加这个解释 - 再次感谢您!对不起,我是新来的代码,不知道如何插入代码以正确显示)我正在尝试理解这段代码 - 学习组装的基础知识。我正在尝试为每个命令添加注释(我相信像我这样的其他人也需要它:

我读到了,为了定义调用约定,我需要弄清楚谁是调用者,谁是被调用者:) 我花了很多时间来理解逻辑: call ds:lstrlenA 是指被调用者吗?sub_401040 是调用者吗?我们可以在一个程序中有多个调用约定吗?像 cdecl 和 stdcall 一样?我不是程序员,也不是在写代码,我只是想了解它是如何帮助分析病毒的。

0 投票
1 回答
159 浏览

c++ - 如何更改DLL中的过程名称

当我用我的程序在 C++ Builder 中编译 DLL 时

我可以在depends.exe 中看到我的程序名称是_show_m。如何删除下划线?(在 dll 中重命名过程)

谢谢