我正在设计一个至少在 mingw 和 msvc++ 之间必须是二进制兼容的 API。到目前为止,我已经限制自己使用函数来获取和返回原始数据类型或指向具有统一成员的 POD 结构的指针(即成员都是相同的类型,这应该会降低填充不兼容的风险)。
不过,在某些时候按值返回结构会很方便,因此被调用者不需要保留临时副本。所以问题是:当被调用者是由与调用者不同的编译器编译时,按值向/从 stdcall 函数传递结构是否安全?这仍然适用于较新版本的 msvc 和 mingw 吗?我会更有信心,但我发现这个主题讨论了在这种确切情况下使用 cdecl 调用约定的问题,这显然只在 mingw 4.6 中解决。