атрибут context_handle_noserialize
Атрибут ACF [context_handle_noserialize] гарантирует, что дескриптор контекста никогда не будет сериализован независимо от поведения приложения по умолчанию.
typedef [context_handle_noserialize [ , type-acf-attribute-list ] ] context-handle-type
[context_handle_noserialize [, function-acf-attribute-list ] ] function-name( );
function-name ( [context_handle_noserialize
[ , parameter-acf-attribute-list ] ] param-name );
Параметры
-
type-acf-attribute-list
-
Любые другие атрибуты ACF, которые применяются к типу.
-
context-handle-type
-
Идентификатор, указывающий тип дескриптора контекста, как определено в объявлении typedef . Это тип, который получает атрибут [context_handle] в IDL-файле.
-
function-acf-attribute-list
-
Любые дополнительные атрибуты ACF, которые применяются к функции.
-
имя функции
-
Имя функции, определенное в IDL-файле.
-
parameter-acf-attribute-list
-
Любые другие атрибуты ACF, которые применяются к параметру .
-
param-name
-
Имя параметра, определенное в IDL-файле.
Комментарии
Атрибут [context_handle] определяет дескриптор привязки, который хранит контекст или сведения о состоянии на сервере между удаленными вызовами процедур. Атрибут может отображаться как атрибут typedef типа IDL, атрибут возвращаемого типа функции или атрибут параметра.
По умолчанию вызовы дескрипторов контекста сериализуются. Приложение может вызвать RpcSsDontSerializeContext , чтобы переопределить это поведение по умолчанию. Использование атрибута [context_handle] в файле ACF гарантирует, что вызовы этого конкретного дескриптора контекста не будут сериализованы независимо от поведения вызывающего приложения. Предоставление подпрограммы запуска контекста является необязательным.
Этот атрибут доступен в MIDL версии 5.0.
Windows Server 2003 и Windows XP или более поздней версии: Один интерфейс может вместить как сериализованные, так и несериализированные дескрипторы контекста, что позволяет одному методу в интерфейсе обращаться исключительно к дескриптору контекста (сериализованному), а другие методы получают доступ к этой обработке контекста в общем режиме (несериализованном). Эти возможности доступа сравнимы с механизмами блокировки чтения и записи; методы, использующие дескриптор сериализованного контекста, являются эксклюзивными пользователями (средствами записи), а методы, использующие несериализированный дескриптор контекста, являются общими пользователями (средствами чтения). Методы, которые уничтожают или изменяют состояние дескриптора контекста, должны быть сериализованы. Методы, которые не изменяют состояние дескриптора контекста, например методы, которые просто считывают из дескриптора контекста, могут быть несериализированы. Обратите внимание, что методы создания неявно сериализуются.
Примеры
typedef [context_handle_noserialize] PCONTEXT_HANDLE_TYPE;
HRESULT RemoteFunc([context_handle_noserialize] pCxHandle);
См. также раздел