Lee*_*ite 4 c++ pinvoke calling-convention stdcall function-declaration
我一直在使用 PInvoke 让我的 C# 应用程序调用我编写的 C++ 函数。
现在,我到处都听到我需要用__stdcall约定定义那些外部可访问的功能。我的问题是:为什么?
到目前为止,我不小心忽略了这个建议,一切都像魅力一样。当我添加__stdcall到我的函数中时,一切都以相同的方式工作(或者至少看起来如此)。
这篇文章说__stdcall是用于Win32位函数,但我是针对x64平台编译的。这是否意味着我不应该使用__stdcall它,还是意味着我错过了其他东西?
并且请在回复时使用简单的英语。;-) 这样的行(引自我链接的文章):
被调用者清理堆栈,因此编译器使可变参数函数 __cdecl。
让我的大脑感觉有风滚草从里面吹过。
x64 上只有一种调用约定,因此您指定哪种调用约定并不重要。在 x64 上它总是被忽略。
在 x86 上,确保接口两侧的调用约定匹配很重要。因此,如果您曾期望在 x86 上运行您的代码,那么现在就应该谨慎行事。