问题标签 [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 回答
411 浏览

class - 由于 cdecl 和 myclass 冲突导致的错误 C2664

我正在尝试将 C 中的一段旧代码加入到我目前的 VC++ 项目中:

coteglob 函数来自旧的 C 部分,finte 是一个中间函数,将 TFStolz 函数传递给 coteglob。

我在论坛中搜索并发现了这个相关问题: How to convert void (__thiscall MyClass::*)(void *) to void (__cdecl *)(void *) pointer 我试图以这种方式应用:

但仍然无法正常工作。有人可以指导我如何适应它吗?我还是个新手,这似乎与我的知识相去甚远。

提前致谢!

0 投票
2 回答
20822 浏览

c# - 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

我正在开发一个相当大的代码库,其中 C++ 功能是从 C# P/Invoked。

我们的代码库中有很多调用,例如...

C++:

使用相应的 C#:

我已经搜索了网络(在我能力范围内),以了解为什么存在这种明显的不匹配。例如,为什么 C# 中有 Cdecl,而 C++ 中有 __stdcall?显然,这会导致堆栈被清除两次,但是,在这两种情况下,变量都以相同的相反顺序被推入堆栈,因此我看不到任何错误,尽管返回信息可能会在以下情况下被清除在调试期间尝试跟踪?

来自 MSDN:http: //msdn.microsoft.com/en-us/library/2x8kf7zx%28v=vs.100%29.aspx

再一次,extern "C"在 C++ 代码和CallingConvention.CdeclC# 中都有。为什么不是CallingConvention.Stdcall?或者,此外,为什么__stdcall在 C++ 中有?

提前致谢!

0 投票
1 回答
1630 浏览

go - 为什么 Go 的编译器“gc”使用与 C 不同的调用约定?

C 使用 cdecl,我已经研究过并从程序集中调用了它。感觉还不错,为什么要破坏兼容性呢?为什么需要另一个公约?

0 投票
1 回答
303 浏览

function - __cdecl 将 WinSock 函数包装为纯 C 中的回调并调用它

准备了这样的函数,其中一些 WSA 函数将用作回调:

但是在其他代码中,我正在尝试启动它:

我收到一个错误:

'WSClient::StartWinSock' : 无法将参数 1 从 'int (__stdcall *)(WORD,LPWSADATA)' 转换为 'int (__cdecl *)(WORD,LPWSADATA)'

另外,我不知道如何通过 WSAStartup() 之类的回调函数正确传递参数(其参数:WORD(无符号短版本号)&& LPWSADATA(对 WSAData 的引用))。

0 投票
0 回答
119 浏览

c# - 如何编写遵循 cdecl 规范的托管 C# dll

我需要编写一个遵循 cdecl 规范的 DLL,以便可以从允许嵌入 dll 的现有应用程序中调用它。我可以使用 C# 和 dotnet 框架编写一个遵循 cdecl 规范的 dll 吗?如何才能做到这一点?

谢谢雷内

0 投票
1 回答
1529 浏览

c# - 在 C# 上从 dll 调用 C 函数时出现 AccessViolationException

我正在尝试使用 PInvoke 来从 C dll 调用非托管函数。由于无法向开发人员发布 dll 的源代码,他们中的一些人使用以下声明在 Delphi 中调用了该函数。我们使用带有 CDECL 调用约定的 SAT.dll。

基于该结构,我在 C# 中制作了以下控制台应用程序,以便从同一个 DLL 测试相同的功能。我做了一些研究,发现delphi中的Longint等价物是C#中的int,而PChar等价物是指向字符串的指针(但我使用了C#的字符串)。

当我调用该函数时,会引发 AccesViolationException。AssociarAssinatura 的代码有一些内部打印,表明该函数的代码确实运行良好。因此,我猜这个问题与函数返回它的值有关。我最好的猜测是,我在调用约定方面遇到了问题。有什么想法吗?

0 投票
3 回答
158 浏览

assembly - 为什么没有同伴指示离开?

为什么在 x86 上没有附带说明?那样,

可能变成:

一般来说,这不是更快吗?

0 投票
3 回答
473 浏览

assembly - 调用可以是 cdecl 或 stdcall 的函数

我需要编写调用外部函数的代码,该函数可以是 32 位 Windows 应用程序中的 stdcall 调用或 cdecl 。
我的代码,调用者,不能提前知道它会是哪一个。现在,如果我尝试从定义为 stdcall 的调用站点调用 cdecl 函数,我会得到一个 checkEsp 异常对话框,我猜这是有充分理由的。
有什么办法吗?

0 投票
1 回答
5440 浏览

c# - C# get the list of unmanaged C dll exports

I have a C dll with exported functions

I can use the command-line tool dumpbin.exe /EXPORTS to extract the list of exported functions, and then use them in my C# code to (successfully) call these functions.

Is there a way to get this exported-functions-list directly from .NET, without having to use an external command-line tool?

Thanks

0 投票
11 回答
3784 浏览

c++ - 有没有办法在没有 .* 或 ->* 运算符的情况下调用成员函数

下面D::foo通过指向成员函数调用函数的方法会产生错误:必须使用.*->*调用'f(...)'中的指向成员函数的指针 ..当然这不是我们调用指针的方式-成员函数。

正确的调用方式是(d.*f)(5);OR(p->*f)(5);

我的问题是,'有没有办法在左侧没有类对象的情况下调用类的成员函数?我想知道我们是否可以将类对象 ( this) 作为常规参数传递?

在我看来,归根结底(在汇编/二进制级别)一个类的所有成员函数都是正常函数,它们应该对 n + 1 个参数进行操作,其中 (+1 是this )

如果我们在下面讨论D::foo函数,在汇编/二进制级别它应该对两个参数进行操作:

  1. 类对象本身(指向 D 类对象的指针称为this
  2. int.

那么,有没有办法(或hack)将D::foo类对象作为函数参数传递给它而不是. or -> or .* or ->*在类对象上使用运算符?

示例代码:

一种方法是使用增强绑定,即

编辑:“请注意,我不是在寻找这个程序的有效版本,我知道如何让它工作”