/cstruct_out switch
This switch modifies the C definition of a COM interface which returns structures to match the ABI a C++ implementer would provide.
midl /cstruct_out
Switch Options
This switch has no parameters.
Remarks
Some interface definitions (notably those in d3d12.idl
) contain __stdcall
methods that return structures. The C and C++ ABIs from MSVC differ in how they implement such functions:
- C treats them as plain functions that take a hidden
this
pointer as the first parameter. The complier applies a small struct optimization that allows structs smaller than 8 bytes (or larger if all values are floating point) to be returned in registers. Only larger structures are promoted to use a hidden parameter and caller-allocated return value. - C++ treats them as member functions. The compiler always does so by inserting a hidden parameter (a pointer to a caller-allocated return value) as the second parameter, after the
this
pointer. It also returns that same pointer as its return value.
This switch forces the C definition of interfaces in the resulting header to assume that the implementer was using C++, and that the C code should instead explicitly use the C++ ABI. This implies that the function includes a hidden parameter for the return value pointer and returns that pointer instead of the structure directly.