/cstruct_out Switch

Dieser Switch ändert die C-Definition einer COM-Schnittstelle, die Strukturen zurückgibt, die dem ABI entsprechen, den ein C++-Implementierunger bereitstellen würde.

midl /cstruct_out

Optionen wechseln

Dieser Schalter verfügt über keine Parameter.

Bemerkungen

Einige Schnittstellendefinitionen (insbesondere jene in d3d12.idl) enthalten __stdcall Methoden, die Strukturen zurückgeben. Die C- und C++-ABIs von MSVC unterscheiden sich in der Implementierung solcher Funktionen:

  • C behandelt sie als einfache Funktionen, die einen ausgeblendeten this Zeiger als ersten Parameter verwenden. Der Konformer wendet eine kleine Strukturoptimierung an, mit der Strukturen, die kleiner als 8 Bytes (oder größer sind, wenn alle Werte Gleitkommawerte sind) in Registern zurückgegeben werden können. Nur größere Strukturen werden höhergestuft, um einen ausgeblendeten Parameter und einen vom Aufrufer zugewiesenen Rückgabewert zu verwenden.
  • C++ behandelt sie als Memberfunktionen. Der Compiler tut dies immer , indem er einen ausgeblendeten Parameter (einen Zeiger auf einen vom Aufrufer zugewiesenen Rückgabewert) als zweiten Parameter nach dem this Zeiger einfügt. Außerdem wird derselbe Zeiger wie der Rückgabewert zurückgegeben.

Dieser Switch erzwingt, dass die C-Definition von Schnittstellen im resultierenden Header davon ausgeht, dass der Implementierer C++ verwendet hat und dass der C-Code stattdessen explizit die C++-ABI verwenden sollte. Dies impliziert, dass die Funktion einen ausgeblendeten Parameter für den Rückgabewertzeiger enthält und diesen Zeiger anstelle der Struktur direkt zurückgibt.

Siehe auch

Allgemeine MIDL-Befehlszeilensyntax