/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.