3

我正在设计一个至少在 mingw 和 msvc++ 之间必须是二进制兼容的 API。到目前为止,我已经限制自己使用函数来获取和返回原始数据类型或指向具有统一成员的 POD 结构的指针(即成员都是相同的类型,这应该会降低填充不兼容的风险)。

不过,在某些时候按值返回结构会很方便,因此被调用者不需要保留临时副本。所以问题是:当被调用者是由与调用者不同的编译器编译时,按值向/从 stdcall 函数传递结构是否安全?这仍然适用于较新版本的 msvc 和 mingw 吗?我会更有信心,但我发现这个主题讨论了在这种确切情况下使用 cdecl 调用约定的问题,这显然只在 mingw 4.6 中解决。

4

2 回答 2

2

像使用 struct 一样不是好的选择。你需要使用

#pragma 包

参考http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=%2Fcom.ibm.vacpp6m.doc%2Fcompiler%2Fref%2Frnpgpack.htm

http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs.80%29.aspx

并确保 mingw 尊重 pragma 指令。

于 2011-05-31T12:59:06.640 回答
0

我不知道 mingw,但如果它可以调用 Win32 API,那么它可以以与 stdcall 兼容的方式传递结构 - 因为许多 Win32 API 既是 stdcall 又是结构。

马丁

于 2011-05-30T22:00:36.237 回答