问题标签 [calling-convention]
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 - 函数指针和调用约定
如何使用调用约定声明函数指针?以上给了我一个错误。
c++ - 检查指针函数类型的调用约定
如何在编译时检查函数指针是否具有__stdcall
调用约定?
就像是
或者至少
c# - c# 中的 __fastcall 约定
考虑到:
微软特定
__fastcall 调用约定指定函数的参数将在可能的情况下在寄存器中传递。以下列表显示了此调用约定的实现。
而且寄存器中的读/写时间比堆栈中的快得多,我们在 C# 中是否有任何 __fastcall 等效项?
c - 函数返回结构的调用约定
对于以下 C 代码:
我得到以下 Win32 的反汇编:
对于 Linux32:
我试图了解呼叫者在通话后的行为方式的差异。为什么 Linux32 中的调用者会做这些额外的 subs?
我假设两个目标都遵循 cdecl 调用约定。cdecl 不是为返回结构的函数定义调用约定吗?!
编辑:
我添加了被调用者的实现。果然,你可以看到 Linux32 被调用者弹出它的参数,而 Win32 被调用者没有:
Win32反汇编:
Linux32反汇编:
c++ - “cdecl”代表什么?
是的,我知道“cdecl”是一个显着的调用约定的名称,所以请不要向我解释调用约定。我要问的是缩写(?)“cdecl”实际上代表什么。我认为这是一个糟糕的命名选择,因为乍一看它让人想起“C 声明符”(C 的一个相当独特的句法方面)。事实上,有一个名为cdecl的程序,其唯一目的是破译 C 声明符。但据我所知,C 声明符语法与调用约定完全无关。
简化版:“stdcall”代表“标准调用约定”。“cdecl”代表什么?
c# - 按值调用和按值传递是同义词吗?
我一直认为按值调用和按值传递是同义词。然而,我最近听到有人提到他们,好像他们是不同的。它们是一样的吗?
我也在谈论他们相应的参考术语。
.net - 如果违反调用约定(在 .NET 3.5 中),为什么 PInvoke 不会崩溃?
我的解决方案有一个非托管 C++ DLL,它导出一个函数,以及一个 PInvoke 这个函数的托管应用程序。
我刚刚将解决方案从 .NET 3.5 转换为 .NET 4.0 并得到了这个 PInvokeStackImbalance “A call to PInvoke function [...] has unbalanced the stack”异常。事实证明,我正在调用 __cdecl'ed 函数,因为它是 __stdcall:
C++ 部分(被调用者):
C#部分(调用者):
所以,我已经修复了这个错误,但现在我对它在 .NET 3.5 中是如何工作的感兴趣?为什么(多次重复)没有人(被调用者或调用者)清理堆栈,没有导致堆栈溢出或其他一些不当行为,而是正常工作的情况?PInvoke 中是否有某种检查,就像 Raymond Chen 在他的文章中提到的那样?这也很有趣,为什么相反类型的破坏约定(让 __stdcall 被调用者像 __cdecl 一样被 PInvoked)根本不起作用,只导致 EntryPointNotFoundException。
c# - 将 C# 委托的调用约定更改为 CDECL
我在使用 DotNet1.1 时遇到了 C# 的这个问题
问题是这样的。我有一个非托管 dll,它有一个带有函数指针(以及其他参数)的函数。当我在 C# 代码中声明 DLLImport 时,我传递了一个委托。但是 C# 中的委托具有stdcall
调用约定,而非托管函数需要一个cdecl
函数指针。因此,我天真的方法导致了崩溃。然后我发现了以下内容:http://www.codeproject.com/KB/cs/cdeclcallback.aspx有人编写了一个出色的库,据我所知,MSIL-hacking 可以更改委托的调用约定。事情进展顺利,直到...
我迁移到 VS2008 和新版本的 .NET。在此版本下,上述库不起作用。我并不是真正的 C# 或 .NET 专家,而且说实话,我几乎不了解他的库是做什么的(尽管它是开源的),所以我什至不想尝试将其适应新的 .NET。但是,我希望更新版本的 C# 可以为我的问题提供更好的解决方案。
所以,SO专家,请帮我解决我的臀部疼痛:)
c++ - C++:通过引用或值传递向量结构?
这是我的向量结构:struct Vector{ float x, y; };
- 我应该按值还是按方式将它传递给函数
const Vector&
?