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.idl
particular 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.