问题标签 [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.
c - 可变参数函数的调用约定
当你初始化一个可变参数列表时,你使用宏va_start
并传递list_name
,the 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)
)
c# - C#/C++ 传递结构得到访问冲突异常
早上好,我正在尝试实现一个 pos 设备。本机 api 是一个 C++ 库,我必须在我的 C# 项目中使用它。我已经导入了几乎所有需要的功能(工作正常),但其中有一个我无论如何都做不到。
这是 C++ 库中的函数:
这是在 C++ 库中声明的结构:
这是 C++ 演示项目中的使用示例:
我在 C# 项目中所做的是声明 Host 结构:
然后,声明函数、属性和符号:
最后测试一下:
我有一个System.AccessViolationException。
我错了什么?
这是整个 API 中唯一一个将结构体作为参数的函数。其他函数具有 struct 作为值返回,它们工作得很好。
c - 为什么结果如此奇怪
我认为答案是 5 、 5.0 、 3.1 、 3。但答案是 在此处输入图像描述
为什么?
fortran - 在 Fortran 中调用 StdCall 子例程
我在 DLL 中有两个子例程。要在 C# 中调用它们,它们将更改为 STDCALL,如下所示:
像这样,我也需要调用MoveToZero
,GetApparent
但是出现错误:
那么,如何在 Fortran 中调用 stdcall 子程序呢?
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
替换,可以解决警告:
- 将 vcruntime_new.h 中的注释用于我自己的替换代码是否安全,如上所示?
- 这种变化的后果是什么?
- 是否有特殊用例是因为注释而不能像以前一样使用“新运算符”?
- 为什么这种改变是必要的?
编辑:
- 我是否正确,注释不会改变生成的二进制文件中的任何内容,并且只是用于静态代码分析?(除了
__cdecl
,它改变了汇编器,但我猜它应该是标准的?)
c++ - 为什么我的 C++ DLL 不适用于我的 Delphi 应用程序?
根据Delphi 到 C++ 类型的映射,Delphi 相当于.wchar_t*
PWideChar
DLL 头文件:
DLL Cpp 文件:
德尔福代码:
但问题是Edit1
单击按钮时没有响应。
所以我该怎么做?
c++ - vc++ stdcall 函数分配给 cdecl 函数指针有效,为什么?
我认为 stdcall 函数不能分配给 cdecl 函数指针,但是在 vc++2022 中,这很好用。我不知道为什么?谢谢!