Comutador /cstruct_out
Essa opção modifica a definição C de uma interface COM que retorna estruturas para corresponder à ABI que um implementador C++ forneceria.
midl /cstruct_out
Opções de opção
Essa opção não tem parâmetros.
Comentários
Algumas definições de interface (notadamente aquelas em d3d12.idl
) contêm __stdcall
métodos que retornam estruturas. As ABIs C e C++ do MSVC diferem na forma como implementam essas funções:
- C os trata como funções simples que tomam um ponteiro oculto
this
como o primeiro parâmetro. O multiplicador aplica uma otimização de struct pequena que permite que structs menores que 8 bytes (ou maiores se todos os valores forem de ponto flutuante) sejam retornados em registros. Somente estruturas maiores são promovidas para usar um parâmetro oculto e um valor retornado alocado pelo chamador. - O C++ os trata como funções membro. O compilador sempre faz isso inserindo um parâmetro oculto (um ponteiro para um valor retornado alocado pelo chamador) como o segundo parâmetro, após o
this
ponteiro. Ele também retorna o mesmo ponteiro que seu valor retornado.
Essa opção força a definição C de interfaces no cabeçalho resultante a assumir que o implementador estava usando C++, e que o código C deve usar explicitamente a ABI C++. Isso implica que a função inclui um parâmetro oculto para o ponteiro de valor retornado e retorna esse ponteiro em vez da estrutura diretamente.