/cstruct_out switch
此开关修改 COM 接口的 C 定义,该接口返回结构以匹配 C++ 实现者提供的 ABI。
midl /cstruct_out
此开关没有参数。
某些接口定义 (特别是) 中的 d3d12.idl
接口定义包含 __stdcall
返回结构的方法。 MSVC 中的 C 和 C++ ABI 在实现此类函数的方式上有所不同:
- C 将它们视为将隐藏
this
指针作为第一个参数的普通函数。 如果所有值都是浮点,) 寄存器中返回,则编译程序应用小型结构优化,允许小于 8 个字节的结构 (或更大。 仅提升较大的结构以使用隐藏参数和调用方分配的返回值。 - C++ 将它们视为成员函数。 为此,编译器 始终 将隐藏参数 (指向调用方分配的返回值的指针) 作为第二个参数插入到
this
该指针之后。 它还返回与其返回值相同的指针。
此开关强制生成的标头中的接口的 C 定义假定实现者使用的是 C++,并且 C 代码应改为显式使用 C++ ABI。 这意味着函数包含返回值指针的隐藏参数,并直接返回该指针而不是 结构。