/cstruct_out スイッチ
このスイッチは、C++ 実装者が提供する ABI に一致するように構造体を返す COM インターフェイスの C 定義を変更します。
midl /cstruct_out
スイッチ のオプション
このスイッチにはパラメーターがありません。
解説
インターフェイス定義の中には、構造体を返すメソッドが含まれている__stdcall
ものもあります。d3d12.idl
MSVCの C と C++ の API は、このような関数の実装方法が異なります。
- C は、非表示
this
のポインターを最初のパラメーターとして受け取るプレーン関数として扱います。 コンパイラは、8 バイトより小さい構造体 (またはすべての値が浮動小数点の場合は大きい) をレジスタに返すことができる小さな構造体の最適化を適用します。 非表示パラメーターと呼び出し元によって割り当てられた戻り値を使用するように昇格されるのは、より大きい構造体だけです。 - C++ では、それらをメンバー関数として扱います。 コンパイラは 常に 、非表示パラメーター (呼び出し元によって割り当てられた戻り値へのポインター) をポインターの後の 2 番目の
this
パラメーターとして挿入することで行います。 また、戻り値と同じポインターを返します。
このスイッチにより、結果のヘッダー内のインターフェイスの C 定義は、実装者が C++ を使用していて、C コードが C++ ABI を明示的に使用する必要があることを前提としています。 これは、関数に戻り値ポインターの非表示パラメーターが含まれており、構造体の代わりにそのポインターを直接返することを意味します。