从stdcall dll函数返回结构是否安全?
我正在设计一个至少在mingw和msvc ++之间必须是二进制兼容的API。 到目前为止,我只限于使用函数来获取和返回基本数据类型或指向具有统一成员的POD结构体的指针(即成员都是相同类型,这将减少不兼容填充的风险)。
在某些时候,按值返回结构会很方便,因此被调用者不需要保留临时副本。 所以问题是:当被调用者是由不同的编译器编译而不是调用者时,是否可以通过值将结构传递给/从stdcall函数安全? 这仍然适用于最新版本的msvc和mingw吗? 我会更加确信这一点,但是我发现这个话题在cdecl调用约定的这种确切情况下讨论了一个问题,显然这只能在4.6版本中解决。
像使用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,但是如果它可以调用Win32 API,那么它可以通过与stdcall兼容的方式传递结构 - 因为许多Win32 API都是stdcall和take structs。
马丁
链接地址: http://www.djcxy.com/p/41891.html上一篇: Is it safe to return a struct from an stdcall dll function?