Переключатель /robust
Параметр /robust сообщает компилятору MIDL о необходимости генерировать дополнительные сведения о проверке ошибок, которые подсистема NDR использует для выполнения проверок целостности во время выполнения.
midl /robust {/Oicf | /Oif }
-
/Oicf
-
/Oif
-
Эти коммутаторы идентичны по своей функциональности. Они указывают метод маршалинга без кода прокси-сервера и используют строки быстрого формата для повышения производительности. См. / Oi.
При использовании параметра /robust создаются дополнительные сведения, которые позволяют подсистеме представления сетевых данных (NDR) выполнять проверку ошибок во время выполнения для коррелированных аргументов в динамических массивах, объединениях и указателях интерфейса вне в приложениях DCOM. Параметр /robust доступен только в Windows 2000 и более поздних версиях Windows.
Коррелирующий аргумент — это аргумент, использующий любой из атрибутов, которые позволяют определять размер объекта данных во время выполнения: size_is, length_is, first_is, last_is, max_is, switch_is и iid_is. В соответствии со спецификацией OSF-DCE для представления провода этот коррелирующий аргумент отображается в двух разных местах. Например, рассмотрим типичное использование атрибута size_is :
HRESULT Func1([in] long Size,
[in, size_is(Size)]BAR_TYPE *pBarType);
В этом примере клиент передает значение long, указывающее размер блока BAR_TYPEs (с точки зрения количества BAR_TYPES элементов), и указатель на фактический блок BAR_TYPEs. Аргумент Size коррелирует с аргументом pBarType. В соответствии со спецификацией OSF-DCE аргумент Size представлен дважды на проводе— сначала как сам по себе, а затем с массивом BAR_TYPE элементов, представляющих аргумент pBarType. Каждый аргумент немаршалируется независимо в соответствии с собственным представлением провода. Как правило, аргумент Size и его копия, которая используется для представления части другого аргумента, имеют одинаковые значения. Однако если аргумент Size поврежден (например, когда блок BAR_TYPES больше выделенного), серверное приложение может перестать отвечать, так как использует значение аргумента Size для измерения входящих данных.
Параметр /robust необходим для реализации допустимой проверки диапазона с помощью атрибута range .
midl /robust /Oicf filename.idl