导出函数(VS2008)的默认调用约定是什么?

发布于 2024-12-13 19:55:20 字数 391 浏览 2 评论 0原文

假设以下 C++ 代码在函数声明中没有提及调用约定,那么导出函数 Exported 的调用约定是什么?我的猜测是 cdecl 的默认值。

extern "C"
{
  __declspec (dllexport) bool Exported(int parm);
}

我使用 LoadLibraryGetProcAddressMarshal.GetDelegateForFunctionPointer 从托管代码调用此函数。我可以使用 UnmanagedFunctionPointer 属性的不同值来装饰我的委托定义,并且它们都似乎都可以工作。

Given the following C++ code which doesn't mention a calling convention in the function declaration, what will the calling convention be for the exported function Exported? My guess would be a default of cdecl.

extern "C"
{
  __declspec (dllexport) bool Exported(int parm);
}

I'm calling this function from managed code, using LoadLibrary, GetProcAddress, and Marshal.GetDelegateForFunctionPointer. I can decorate my delegate definition with different values of the UnmanagedFunctionPointer attribute and they all seem to work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

左秋 2024-12-20 19:55:20

默认调用约定是 cdecl。请注意,__declspec(dllexport) 对调用约定没有影响。

调用约定可以在代码中指定,也可以通过编译器选项指定。我不建议使用编译器选项,它有点太晦涩了。在代码中明确说明,然后任何阅读 if 的人都知道使用什么约定。

请注意,对于 64 位 Windows 代码,所有调用约定都是等效的,这可以解释您所看到的内容。

The default calling convention is cdecl. Note that __declspec(dllexport) has no influence on calling convention.

The calling convention can be specified in code, or by a compiler option. I don't recommend using the compiler option, it's a bit too obscure. Make it explicit in code and then anyone reading if knows what convention is used.

Note that for 64 bit Windows code, all calling conventions are equivalent which could explain what you see.

故事灯 2024-12-20 19:55:20

默认的调用约定还取决于一些编译器开关:

在 c/c++ 下 ->高级你可以设置它:

/Gd = cdecl, /Gz = stdcall, /Gr = fastcall

The default calling convetion also depends on some compiler switches:

Under c/c++ -> advanced you can set it:

/Gd = cdecl, /Gz = stdcall, /Gr = fastcall

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文