Параметр /cstruct_out
Этот параметр изменяет определение C com-интерфейса, которое возвращает структуры в соответствии с ABI, предоставляемым реализацией C++.
midl /cstruct_out
Параметры переключения
Этот параметр не имеет параметров.
Комментарии
Некоторые определения интерфейсов (в частности, в d3d12.idl
) содержат __stdcall
методы, возвращающие структуры. ABI C и C++ от MSVC отличаются тем, как они реализуют такие функции:
- C обрабатывает их как обычные функции, которые принимают скрытый
this
указатель в качестве первого параметра. Соответствующий метод применяет небольшую оптимизацию структуры, которая позволяет возвращать структуры размером менее 8 байт (или больше, если все значения являются значениями с плавающей запятой) в регистрах. Только более крупные структуры используют скрытый параметр и возвращаемое значение, выделенное вызывающим объектом. - C++ обрабатывает их как функции-члены. Компилятор всегда делает это путем вставки скрытого параметра (указателя на возвращаемое значение, выделенное вызывающим) в качестве второго параметра после указателя
this
. Он также возвращает тот же указатель, что и возвращаемое значение.
Этот параметр заставляет определение интерфейсов C в результирующем заголовке предполагать, что реализующий объект использовал C++, а код C должен явно использовать ABI C++. Это означает, что функция включает скрытый параметр для указателя возвращаемого значения и возвращает этот указатель вместо структуры напрямую.