Opzione /cstruct_out
Questa opzione modifica la definizione C di un'interfaccia COM che restituisce le strutture in modo che corrispondano all'implementazione di ABI fornito da un implementatore C++.
midl /cstruct_out
Questa opzione non ha parametri.
Alcune definizioni di interfaccia (in particolare quelle in d3d12.idl
) contengono __stdcall
metodi che restituiscono strutture. Gli ABI C e C++ di MSVC differiscono in base al modo in cui implementano tali funzioni:
- C li considera come funzioni semplici che accettano un puntatore nascosto
this
come primo parametro. L'conforme applica un'ottimizzazione di struct di piccole dimensioni che consente di restituire struct di dimensioni inferiori a 8 byte (o maggiori se tutti i valori sono a virgola mobile) nei registri. Vengono promosse solo strutture più grandi per usare un parametro nascosto e un valore restituito allocato dal chiamante. - C++ li considera come funzioni membro. Il compilatore esegue sempre questa operazione inserendo un parametro nascosto (un puntatore a un valore restituito allocato dal chiamante) come secondo parametro, dopo il
this
puntatore. Restituisce anche lo stesso puntatore del valore restituito.
Questa opzione forza la definizione C delle interfacce nell'intestazione risultante a presupporre che l'implementatore usasse C++e che il codice C debba invece usare in modo esplicito l'ABI C++. Ciò implica che la funzione include un parametro nascosto per il puntatore del valore restituito e restituisce tale puntatore anziché direttamente la struttura.