Commutateur /cstruct_out
Ce commutateur modifie la définition C d’une interface COM qui retourne des structures pour qu’elles correspondent à l’ABI qu’un implémenteur C++ fournirait.
midl /cstruct_out
Options de commutateur
Ce commutateur n’a aucun paramètre.
Notes
Certaines définitions d’interface (notamment celles de d3d12.idl
) contiennent des méthodes qui retournent __stdcall
des structures. Les API C et C++ de MSVC diffèrent dans la façon dont ils implémentent ces fonctions :
- C les traite comme des fonctions simples qui prennent un pointeur masqué
this
comme premier paramètre. Le conformateur applique une optimisation de struct de petite taille qui permet aux struct inférieurs à 8 octets (ou plus si toutes les valeurs sont à virgule flottante) d’être retournés dans les registres. Seules les structures plus grandes sont promues pour utiliser un paramètre masqué et une valeur de retour allouée par l’appelant. - C++ les traite comme des fonctions membres. Le compilateur le fait toujours en insérant un paramètre masqué (un pointeur vers une valeur de retour allouée par l’appelant) comme deuxième paramètre, après le
this
pointeur. Il retourne également le même pointeur que sa valeur de retour.
Ce commutateur force la définition C des interfaces dans l’en-tête résultant à supposer que l’implémenteur utilise C++, et que le code C doit utiliser explicitement l’ABI C++. Cela implique que la fonction inclut un paramètre masqué pour le pointeur de valeur de retour et retourne ce pointeur directement au lieu de la structure.