Переключатель /Oi
Параметры /Oi и /Oic направляют компилятор MIDL на использование полностью интерпретированного метода маршалинга. Параметр /Oicf обеспечивает дополнительные улучшения производительности.
midl /{Oi | Oic | Oif | Oicf}
-
Эй
-
Указывает полностью интерпретируемый метод для маршалинга кода заглушки, передаваемого между клиентом и сервером.
Примечание
Этот параметр устарел. Рекомендуется использовать вместо него параметр /Oicf .
-
Оик
-
Указывает метод маршалинга без кода прокси-сервера, который предоставляет все возможности /Oi , а также дополнительно уменьшает размер кода заглушки клиента для интерфейсов объектов.
Примечание
Этот параметр устарел. Рекомендуется использовать вместо него параметр /Oicf .
-
Oif или Oicf
-
Указывает метод маршалинга без кода прокси-сервера, который включает все функции, предоставляемые /Oi и /Oic , но использует новый интерпретатор (строки быстрого форматирования), который обеспечивает лучшую производительность, чем /Oi или /Oic. Этот параметр включает последние улучшения RPC и рекомендуется для современных сценариев RPC.
Обратите внимание на ограничения, связанные со вспомогательными платформами.
Компилятор MIDL 3.0 предоставляет два метода маршалинга кода: полностью интерпретируемый ( /Oi, /Oic и /Oicf) и смешанный режим ( /Os). Начиная с MIDL версии 6.0.359, компилятор MIDL по умолчанию создает заглушки /Oicf /robust . Некоторые языковые функции не поддерживаются в некоторых режимах. В этом случае компилятор автоматически переключается в соответствующий режим и выдает предупреждение.
Если производительность является проблемой, оптимальным подходом может быть смешанный режим ( /Os). В этом режиме компилятор выбирает маршал некоторых параметров, встроенных в созданные заглушки. Хотя это приводит к увеличению размера заглушки, она обеспечивает повышенную производительность.
Полностью интерпретируемый метод маршалирует данные полностью в автономном режиме. Это значительно уменьшает размер кода заглушки, но приводит к снижению производительности. Кроме того, при использовании полностью интерпретированного метода существует ограничение в 16 параметров для каждой процедуры. Любая процедура, содержащая более 16 параметров, будет автоматически обрабатываться в режиме /Os . Среди интерпретируемых режимов /Oicf обеспечивает лучшую производительность, а /Oi — наилучшую обратную совместимость.
Вы можете использовать параметр /Oif , если приложение использует функции MIDL, появившиеся в MIDL 3.0, такие как атрибуты [wire_marshal] и [user_marshal]. Если приложение использует каналы , необходимо использовать параметр /Oif ; Если указать другой режим, компилятор MIDL переключится на /Oif.
Чтобы точно настроить способ маршалирования кода заглушки, Microsoft RPC предоставляет атрибут ACF [optimize]. Этот атрибут используется в качестве атрибута интерфейса или атрибута операции для выбора режима маршалинга для отдельных интерфейсов или для отдельных операций.
Заглушки, созданные компилятором MIDL в интерпретируемом методе с помощью параметров /Oi, /Oic или /Oif , должны быть скомпилированы как процедура stdcall или cdecl во время компиляции C. Соглашение о вызовах PASCAL или Fastcall не будет работать. Кроме того, заглушка сервера должна быть скомпилирована как stdcall.
midl /Oi имя файла.idl
midl /Oic filename.idl
midl /Oif filename.idl