атрибут explicit_handle
Атрибут ACF [explicit_handle] указывает, что каждая процедура имеет в качестве первого параметра примитивный дескриптор, например тип handle_t .
[
explicit_handle
]
interface interface-name
{
...
}
Параметры
-
interface-name
-
Указывает имя интерфейса.
Комментарии
При использовании атрибута [explicit_handle] каждая процедура имеет примитивный дескриптор в качестве первого параметра, даже если IDL-файл не содержит этот дескриптор в списке параметров. Прототипы, создаваемые в файл заголовка и подпрограммы-заглушки, содержат дополнительный параметр, который используется в качестве дескриптора для направления удаленного вызова.
Атрибут [explicit_handle] влияет как на удаленные процедуры, так и на процедуры сериализации. Для сериализации типов подпрограммы поддержки создаются с исходным параметром в качестве явного дескриптора (сериализации). Если атрибут [explicit_handle] не используется, приложение по-прежнему может указать, что операция имеет явный дескриптор (привязку или сериализацию), направляющий вызов. Для этого в IDL-файл предоставляется прототип с аргументом, содержащим тип дескриптора. Обратите внимание, что в режиме по умолчанию аргумент, который не отображается первым, также можно использовать в качестве дескриптора, направляющего вызов.
Таким образом, хотя атрибут [explicit_handle] является способом предоставления прототипу IDL примитивного атрибута [explicit_handle] , ему не обязательно требуется изменение IDL-файла. В режиме /osf в качестве явного типа дескриптора можно использовать только первый аргумент.
Атрибут [explicit_handle] можно использовать в качестве атрибута интерфейса или атрибута операции. Как атрибут интерфейса он влияет на все операции в интерфейсе и все типы, требующие поддержки сериализации. Однако если он используется в качестве атрибута операции, он влияет только на конкретную операцию. Если метод содержит один или несколько дескрипторов контекста [in], в качестве дескриптора привязки используется самый левый дескриптор контекста [in] и дополнительный явный дескриптор не создается.
Примеры
/* ACF File */
[
explicit_handle
]
interface iface
{
// Interface definition statements.
};
См. также раздел