我正在设计一个必须至少在mingw和msvc ++之间进行二进制兼容的API。到目前为止,我限制自己使用函数来获取和返回原始数据类型或指向具有统一成员的POD结构的指针(即成员都是相同的类型,这应该可以降低不兼容填充的风险)。
在某些点上通过值返回结构会很方便,因此被调用者不需要保留临时副本。所以问题是:当调用者是由与调用者不同的编译器编译时,通过值向/从stdcall函数传递结构是否安全?对于msvc和mingw的最新版本,这仍然适用吗?我会更有信心,但是我发现this topic在cdecl调用约定的情况下讨论了这个问题,这显然只能在mingw 4.6中解决。
答案 0 :(得分:2)
使用struct就像不是一个好选择。你需要使用
#pragma pack
http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs.80%29.aspx
并确保mingw尊重pragma指令。
答案 1 :(得分:0)
我不知道mingw,但如果它可以调用Win32 API,那么它可以以与stdcall兼容的方式传递结构 - 因为许多Win32 API都是stdcall和take结构。
马丁