问题标签 [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 投票
1 回答
337 浏览

c - 可变参数函数的调用约定

当你初始化一个可变参数列表时,你使用宏va_start并传递list_namethe last fixed parameter before the va list starts因为“最后一个固定参数与第一个变量相邻”并且不知何故这有助于识别 var arg 长度/堆栈中的位置(我说不知何故,因为我不明白如何)。

使用cdecl调用约定(意味着从右到左推入堆栈参数)the last fixed parameter before the va list starts在识别列表长度方面有什么用处?例如,如果该参数是一个整数3并且变量参数也有一个3被调用者如何知道可变参数列表没有在这里结束,因为还有另一个3(固定参数)并且应该结束?例如f(int a, int b, ... )->调用 f(1, 3, 1, 2, 3)

反过来,在调用函数时,您可以在其中添加例如指针在可变参数 args 末尾的监护人“样式”。NULL再说一遍:NULL如果它被第一个压入堆栈,这有什么用?不应该在参数的固定部分和可变部分之间推入 NULL 吗?(例如f(int a, int b, ... )->呼叫 f(a, b, NULL, param1, param2)

0 投票
1 回答
106 浏览

c# - C#/C++ 传递结构得到访问冲突异常

早上好,我正在尝试实现一个 pos 设备。本机 api 是一个 C++ 库,我必须在我的 C# 项目中使用它。我已经导入了几乎所有需要的功能(工作正常),但其中有一个我无论如何都做不到。

这是 C++ 库中的函数:

这是在 C++ 库中声明的结构:

这是 C++ 演示项目中的使用示例:

我在 C# 项目中所做的是声明 Host 结构:

然后,声明函数、属性和符号:

最后测试一下:

我有一个System.AccessViolationException

我错了什么?

这是整个 API 中唯一一个将结构体作为参数的函数。其他函数具有 struct 作为值返回,它们工作得很好。

0 投票
1 回答
42 浏览

c - 为什么结果如此奇怪

我认为答案是 5 、 5.0 、 3.1 、 3。但答案是 在此处输入图像描述

为什么?

0 投票
1 回答
82 浏览

fortran - 在 Fortran 中调用 StdCall 子例程

我在 DLL 中有两个子例程。要在 C# 中调用它们,它们将更改为 STDCALL,如下所示:

像这样,我也需要调用MoveToZeroGetApparent但是出现错误:

那么,如何在 Fortran 中调用 stdcall 子程序呢?

0 投票
1 回答
339 浏览

windows - 替换“operator new”时出现警告 (C28251):“new”注释不一致,此实例没有注释

我正在尝试替换 Visual Studio 和 C++ 中的全局 new 运算符。这是我的代码(为简单起见,仅显示了一个新运算符):

它工作正常,但是在为我的项目运行代码分析时,Visual Studio 给了我一个警告:

warning C28251: Inconsistent annotation for 'new': this instance has no annotations. The first user-provided annotation on this built-in function is at line vcruntime_new.h(48).

按照 IntelliSense 警告中的建议,使用 vcruntime_new.h 中的注释进行operator new替换,可以解决警告:

  1. 将 vcruntime_new.h 中的注释用于我自己的替换代码是否安全,如上所示?
  2. 这种变化的后果是什么?
  3. 是否有特殊用例是因为注释而不能像以前一样使用“新运算符”?
  4. 为什么这种改变是必要的?

编辑:

  1. 我是否正确,注释不会改变生成的二进制文件中的任何内容,并且只是用于静态代码分析?(除了__cdecl,它改变了汇编器,但我猜它应该是标准的?)
0 投票
0 回答
108 浏览

c++ - 为什么我的 C++ DLL 不适用于我的 Delphi 应用程序?

根据Delphi 到 C++ 类型的映射,Delphi 相当于.wchar_t*PWideChar

DLL 头文件:

DLL Cpp 文件:

德尔福代码:

但问题是Edit1单击按钮时没有响应。

所以我该怎么做?

0 投票
1 回答
32 浏览

c++ - vc++ stdcall 函数分配给 cdecl 函数指针有效,为什么?

我认为 stdcall 函数不能分配给 cdecl 函数指针,但是在 vc++2022 中,这很好用。我不知道为什么?谢谢!