_commutateur/cstruct out
Ce commutateur modifie la définition C d’une interface COM qui retourne des structures correspondant à l’ABI qu’un implémenteur C++ peut fournir.
midl /cstruct_out
Options de commutateur
Ce commutateur n’a aucun paramètre.
Remarques
Certaines définitions d’interface (notamment celles de d3d12.idl ) contiennent des __stdcall méthodes qui retournent des structures. les abi C et C++ de MSVC diffèrent dans la manière dont ils implémentent les fonctions suivantes :
- C les traite comme des fonctions brutes qui prennent un
thispointeur masqué comme premier paramètre. Le compilateur applique une petite optimisation de struct qui autorise les structs 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 effectue toujours cela en insérant un paramètre masqué (pointeur vers une valeur de retour allouée par l’appelant) en tant que deuxième paramètre, après le
thispointeur. Elle 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 utilisait C++ et que le code C doit utiliser à la place explicitement l’ABI C++. Cela implique que la fonction inclue un paramètre masqué pour le pointeur de valeur de retour et retourne ce pointeur au lieu de la structure directement.