async_uuid - атрибут
Атрибут интерфейса [async_uuid] указывает компилятору MIDL определять синхронную и асинхронную версии COM-интерфейса.
[
object,
uuid(string-uuid1),
async_uuid(string-uuid2)[ [, interface-attribute-list]
]
interface interface-name : base-interface
{
interface-definition
}
Параметры
-
string-uuid1
-
Строка UUID, созданная служебной программой Uuidgen, идентифицирующая синхронную версию интерфейса.
-
string-uuid2
-
Строка UUID, созданная служебной программой Uuidgen, идентифицирующая асинхронную версию интерфейса.
-
interface-attribute-list
-
Другие атрибуты, которые применяются к интерфейсу в целом. Атрибут [version] нельзя использовать в COM-интерфейсе.
-
interface-name
-
Имя интерфейса.
-
базовый интерфейс
-
Интерфейс, от которого наследуется этот интерфейс. Базовым интерфейсом должен быть IUnknown или асинхронный интерфейс, который прямо или косвенно является производным от IUnknown.
-
определение интерфейса
-
Задает операторы IDL, которые формируют определение интерфейса.
Комментарии
Для использования этого атрибута требуется Windows 2000 или более поздней версии Windows.
При применении атрибута [async_uuid] к COM-интерфейсу (то есть интерфейсу с атрибутом [object] компилятор MIDL создает асинхронное определение интерфейса в дополнение к традиционной синхронной версии. Асинхронный интерфейс будет иметь те же имена, что и синхронный интерфейс, но с префиксом "Async". Идентификатор интерфейса (IID) будет UUID, указанный в качестве параметра атрибута [async_uuid] .
Для асинхронного интерфейса MIDL разделяет каждый метод на отдельные методы begin и finish . Метод begin имеет имя синхронного метода с префиксом "Begin_" и включает все параметры [in] из синхронного метода. Метод finish имеет имя синхронного метода с префиксом "Finish_" и включает все параметры [out] из синхронного метода. Если синхронный метод имеет какие-либо параметры [in, out], они будут включены в асинхронные методы begin и finish .
Если асинхронный метод интерфейса имеет атрибут [call_as] , MIDL создаст объявления для методов begin и finish . Необходимо реализовать оба метода.
Каждый асинхронный интерфейс является модификатором синхронного интерфейса и, как таковой, не имеет отдельного графа наследования. Это означает, что синхронный интерфейс нельзя определить из асинхронного интерфейса (кроме IUnknown). Синхронные интерфейсы также не могут наследоваться от асинхронных интерфейсов. При попытке компилятор MIDL выдаст сообщение об ошибке.
Примеры
[
object,
uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
async_uuid(1c733a30-2a1c-11ce-ade5-00aa0044773d),
pointer_default(unique)
]
interface IMyInterface : IUnknown
{
/* Interface definition goes here*/
}
См. также раздел