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