【发布时间】:2011-05-30 21:13:34
【问题描述】:
我正在设计一个至少在 mingw 和 msvc++ 之间必须是二进制兼容的 API。到目前为止,我已经限制自己使用函数来获取和返回原始数据类型或指向具有统一成员的 POD 结构的指针(即成员都是相同的类型,这应该会降低填充不兼容的风险)。
在某些时候按值返回结构会很方便,因此被调用者不需要保留临时副本。所以问题是:当被调用者是由与调用者不同的编译器编译时,按值向/从 stdcall 函数传递结构是否安全?这仍然适用于较新版本的 msvc 和 mingw 吗?我会更有信心,但我发现this topic 在这种确切情况下使用 cdecl 调用约定讨论了一个问题,这显然只在 mingw 4.6 中得到解决。
【问题讨论】:
-
我现在实际试了一下,编译不出来。那么,在该约定中根本不可能按值传递结构吗?这将很快解决这个问题。
-
你应该坚持传递指针,因为按值传递结构通常是一个坏主意(除非它们适合寄存器,但即便如此......)。
标签: visual-c++ dll mingw binary-compatibility