问题标签 [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.
class - 由于 cdecl 和 myclass 冲突导致的错误 C2664
我正在尝试将 C 中的一段旧代码加入到我目前的 VC++ 项目中:
coteglob 函数来自旧的 C 部分,finte 是一个中间函数,将 TFStolz 函数传递给 coteglob。
我在论坛中搜索并发现了这个相关问题: How to convert void (__thiscall MyClass::*)(void *) to void (__cdecl *)(void *) pointer 我试图以这种方式应用:
但仍然无法正常工作。有人可以指导我如何适应它吗?我还是个新手,这似乎与我的知识相去甚远。
提前致谢!
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.Cdecl
C# 中都有。为什么不是CallingConvention.Stdcall
?或者,此外,为什么__stdcall
在 C++ 中有?
提前致谢!
go - 为什么 Go 的编译器“gc”使用与 C 不同的调用约定?
C 使用 cdecl,我已经研究过并从程序集中调用了它。感觉还不错,为什么要破坏兼容性呢?为什么需要另一个公约?
function - __cdecl 将 WinSock 函数包装为纯 C 中的回调并调用它
准备了这样的函数,其中一些 WSA 函数将用作回调:
但是在其他代码中,我正在尝试启动它:
我收到一个错误:
'WSClient::StartWinSock' : 无法将参数 1 从 'int (__stdcall *)(WORD,LPWSADATA)' 转换为 'int (__cdecl *)(WORD,LPWSADATA)'
另外,我不知道如何通过 WSAStartup() 之类的回调函数正确传递参数(其参数:WORD(无符号短版本号)&& LPWSADATA(对 WSAData 的引用))。
c# - 如何编写遵循 cdecl 规范的托管 C# dll
我需要编写一个遵循 cdecl 规范的 DLL,以便可以从允许嵌入 dll 的现有应用程序中调用它。我可以使用 C# 和 dotnet 框架编写一个遵循 cdecl 规范的 dll 吗?如何才能做到这一点?
谢谢雷内
c# - 在 C# 上从 dll 调用 C 函数时出现 AccessViolationException
我正在尝试使用 PInvoke 来从 C dll 调用非托管函数。由于无法向开发人员发布 dll 的源代码,他们中的一些人使用以下声明在 Delphi 中调用了该函数。我们使用带有 CDECL 调用约定的 SAT.dll。
基于该结构,我在 C# 中制作了以下控制台应用程序,以便从同一个 DLL 测试相同的功能。我做了一些研究,发现delphi中的Longint等价物是C#中的int,而PChar等价物是指向字符串的指针(但我使用了C#的字符串)。
当我调用该函数时,会引发 AccesViolationException。AssociarAssinatura 的代码有一些内部打印,表明该函数的代码确实运行良好。因此,我猜这个问题与函数返回它的值有关。我最好的猜测是,我在调用约定方面遇到了问题。有什么想法吗?
assembly - 为什么没有同伴指示离开?
为什么在 x86 上没有附带说明?那样,
可能变成:
一般来说,这不是更快吗?
assembly - 调用可以是 cdecl 或 stdcall 的函数
我需要编写调用外部函数的代码,该函数可以是 32 位 Windows 应用程序中的 stdcall 调用或 cdecl 。
我的代码,调用者,不能提前知道它会是哪一个。现在,如果我尝试从定义为 stdcall 的调用站点调用 cdecl 函数,我会得到一个 checkEsp 异常对话框,我猜这是有充分理由的。
有什么办法吗?
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
c++ - 有没有办法在没有 .* 或 ->* 运算符的情况下调用成员函数
下面D::foo
通过指向成员函数调用函数的方法会产生错误:必须使用.*
或->*
调用'f(...)'中的指向成员函数的指针
..当然这不是我们调用指针的方式-成员函数。
正确的调用方式是(d.*f)(5);
OR(p->*f)(5);
我的问题是,'有没有办法在左侧没有类对象的情况下调用类的成员函数?我想知道我们是否可以将类对象 ( this
) 作为常规参数传递?
在我看来,归根结底(在汇编/二进制级别)一个类的所有成员函数都是正常函数,它们应该对 n + 1 个参数进行操作,其中 (+1 是this
)
如果我们在下面讨论D::foo
函数,在汇编/二进制级别它应该对两个参数进行操作:
- 类对象本身(指向 D 类对象的指针称为
this
) - 和
int
.
那么,有没有办法(或hack)将D::foo
类对象作为函数参数传递给它而不是. or -> or .* or ->*
在类对象上使用运算符?
示例代码:
一种方法是使用增强绑定,即
编辑:“请注意,我不是在寻找这个程序的有效版本,我知道如何让它工作”