Share via


Modificador /cstruct_out

Este modificador modifica la definición de C de una interfaz COM que devuelve estructuras para que coincidan con la ABI que proporcionaría un implementador de C++.

midl /cstruct_out

Opciones de modificador

Este modificador no tiene parámetros.

Comentarios

Algunas definiciones de interfaz (en d3d12.idlparticular las de ) contienen métodos que devuelven __stdcall estructuras. Las ABA de C y C++ de MSVC difieren en cómo implementan estas funciones:

  • C los trata como funciones sin formato que toman un puntero oculto this como primer parámetro. El compilador aplica una optimización de estructura pequeña que permite que las estructuras sean inferiores a 8 bytes (o mayores si todos los valores son de punto flotante) se devolverán en los registros. Solo se promueven estructuras más grandes para usar un parámetro oculto y un valor devuelto asignado por el autor de la llamada.
  • C++ los trata como funciones miembro. El compilador siempre lo hace insertando un parámetro oculto (un puntero a un valor devuelto asignado por el autor de la llamada) como segundo parámetro, después del this puntero. También devuelve ese mismo puntero que su valor devuelto.

Este modificador obliga a la definición de C de las interfaces en el encabezado resultante a suponer que el implementador usaba C++, y que el código de C debería usar explícitamente la ABI de C++. Esto implica que la función incluye un parámetro oculto para el puntero de valor devuelto y devuelve ese puntero en lugar de la estructura directamente.

Consulte también

Sintaxis general de la línea de comandos de MIDL