dual - атрибут
Двойной атрибут идентифицирует интерфейс, который предоставляет свойства и методы через IDispatch и напрямую с помощью РАСШИРЕНИЯ УПРАВЛЕНИЯ.
[
uuid(uuid-number),
oleautomation,
dual
[ , optional-attribute-list]
]
interface interface-name
{
. . .
};
-
uuid-number
-
Задает универсальный уникальный идентификационный номер для интерфейса.
-
optional-attribute-list
-
Указывает список из нуля или более дополнительных атрибутов MIDL.
-
имя интерфейса
-
Имя интерфейса, к которому будет применен двойной атрибут.
Интерфейсы, определяемые атрибутом dual , должны быть совместимы со службой автоматизации и быть производными от IDispatch. Этот атрибут не допускается для dispinterfaces.
Двойной атрибут создает интерфейс, который является интерфейсом IDispatch и интерфейсом COM. Первые семь записей в 2-м интерфейсе в 2000 году представляют собой семь элементов IDispatch, а остальные записи предназначены для прямого доступа к членам двойного интерфейса. Все параметры и типы возвращаемых значений, указанные для элементов двойного интерфейса, должны быть совместимыми с автоматизацией.
Все члены двойного интерфейса должны передавать HRESULT в качестве возвращаемого значения функции. Члены, такие как функции метода доступа к свойствам, которые должны возвращать другие значения, должны указывать последний параметр как out, retval, указывая выходной параметр, возвращающий значение функции. Кроме того, члены, которым требуется поддержка нескольких языковых стандартов, должны передавать параметр lcid .
Двойной интерфейс обеспечивает как скорость прямой привязки ИНСТРУКЦИИ, так и гибкость привязки IDispatch . По этой причине по возможности рекомендуется использовать двойные интерфейсы.
Примечание
Если приложение обращается к данным объекта путем приведения этого указателя в вызове интерфейса, необходимо проверка указатели в объекте с собственными указателями НАВЛ, чтобы убедиться, что вы подключены к соответствующему прокси-серверу.
Указание двойного параметра в интерфейсе подразумевает, что интерфейс совместим со службой автоматизации, и, следовательно, устанавливает флаги TYPEFLAG_FDUAL и TYPEFLAG_FOLEAUTOMATION.
TYPEFLAG_FDUAL, TYPEFLAG_FOLEAUTOMATION
[
uuid(1e196b20-1f3c-1069-996b-00dd010fe676),
oleautomation, dual
]
interface IHello : IDispatch
{
//Diverse properties and methods defined here.
};