Поделиться через


Параметр /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++. Это означает, что функция включает скрытый параметр для указателя возвращаемого значения и возвращает этот указатель вместо структуры напрямую.

См. также раздел

Общий синтаксис командной строки MIDL