dispinterface - атрибут

Оператор dispinterface определяет набор свойств и методов, для которых можно вызвать IDispatch::Invoke. Dispinterface можно определить путем явного перечисления набора поддерживаемых методов и свойств (синтаксис 1) или путем перечисления одного интерфейса (синтаксис 2).

[
    [attributes]
]
dispinterface dispinterface-name
{
    properties:
        property-list
    methods:
        method-list
};

[
  [attributes]
]
dispinterface dispinterface-name
{
    interface interface-name
};

Параметры

attributes

Указывает атрибуты, которые применяются ко всему dispinterface. Принимаются следующие атрибуты: [helpstring], [helpcontext], [helpfile], [hidden], [nonextensible], [oleautomation], [restricted], [uuid] и [version].

dispinterface-name

Имя, под которым dispinterface известно в библиотеке типов. Это имя должно быть уникальным в пределах библиотеки типов.

список свойств

(Синтаксис 1) Необязательный список свойств, поддерживаемых объектом , объявленный в виде переменных. Это краткая форма объявления функций свойств в списке методов. Дополнительные сведения см. в разделе примечаний.

method-list

(Синтаксис 1) Список, содержащий прототип функции для каждого метода и свойства в dispinterface. В списке метаданных может отображаться любое количество определений функций. Функция в списке methlist имеет следующую форму:

[атрибуты]returntype methname type paramname(params);

В методе dispinterface принимаются следующие атрибуты: [helpstring], [helpcontext], [propget], [propput], [propputref], [string], и [vararg]. Если указан параметр [vararg] , последний параметр должен быть безопасным массивом типа VARIANT .

Список параметров представляет собой список с разделителями-запятыми, каждый элемент которого имеет следующую форму:

[атрибуты]

Тип может быть любым объявленным или встроенным типом, а также указателем на любой тип. Атрибуты параметров:

[in], [out], [optional], [string]

interface-name

(Синтаксис 2) Имя интерфейса, объявляемого как интерфейс IDispatch.

Комментарии

Компилятор MIDL принимает следующий порядок параметров (слева направо):

  1. Обязательные параметры (параметры, которые не имеют атрибутов [defaultvalue] или [optional]),
  2. необязательные параметры с атрибутом [defaultvalue] или без нее;
  3. параметры с атрибутом [необязательный] и без атрибута [defaultvalue],
  4. [ lcid] параметр, если таковой есть,
  5. [ retval] параметр

Функции метода указываются точно так, как описано на странице справочника по модулю , за исключением того, что атрибут [ entry] не разрешен. Обратите внимание, что STDOLE32. TLB (STDOLE. TLB в 16-разрядных системах) необходимо импортировать, так как dispinterface наследуется от IDispatch.

Свойства можно объявлять в списках свойств или методов. Объявление свойств в списке свойств не указывает тип доступа, поддерживаемый свойством (то есть get, put или putref). Укажите атрибут [ readonly] для свойств, которые не поддерживают put или putref. При объявлении функций свойств в списке методов функции для одного свойства имеют одинаковый идентификатор.

При использовании первого синтаксиса требуются теги properties: и methods: . Атрибут [ id] также является обязательным для каждого элемента. Пример:

properties: 
    [id(0)] int Value;    // Default property. 
methods: 
    [id(1)] HRESULT Show();

В отличие от членов интерфейса, члены dispinterface не могут использовать атрибут retval для возврата значения в дополнение к коду ошибки HRESULT. Атрибут [ lcid] также недопустим для dispinterfaces, так как IDispatch::Invoke передает LCID. Однако можно повторно объявить интерфейс, использующий эти атрибуты.

Используя второй синтаксис, интерфейсы, которые поддерживают IDispatch и объявлены ранее в скрипте ODL, можно повторно объявить как интерфейсы IDispatch следующим образом:

dispinterface helloPro 
{ 
    interface hello; 
};

В предыдущем примере объявляют все члены hello и все члены, наследуемые hello, как поддерживающие IDispatch. В этом случае, если hello были объявлены ранее с элементами [lcid] и [retval], возвращающими HRESULT, MkTypLib удалит каждый параметр [lcid] и тип возвращаемого значения HRESULT, а вместо этого помечает тип возвращаемого значения как тип параметра [retval].

Примечание

Средство Mktyplib.exe устарело. Вместо этого используйте компилятор MIDL.

 

Свойства и методы dispinterface не являются частью параметров ПАРАМЕТРОВL dispinterface. Следовательно, CreateStdDispatch и DispInvoke нельзя использовать для реализации IDispatch::Invoke. Dispinterface используется, когда приложению необходимо предоставить существующие функции, не относящиеся к нулю, через автоматизацию. Эти приложения могут реализовать IDispatch::Invoke путем проверки параметра dispidMember и непосредственного вызова соответствующей функции.

Примеры

[ 
    uuid(1e196b20-1f3c-1069-996b-00dd010fe676), 
    version(1.0), 
    helpstring("Useful help string."), 
    helpcontext(2480)
] 
dispinterface MyDispatchObject 
{ 
    properties: 
        [id(1)] int x;    //An integer property named x 
        [id(2)] BSTR y;   //A string property named y 
    methods: 
        [id(3)] HRESULT show();    //No arguments, no result 
        [id(11)] int computeit(int inarg, double *outarg); 
}; 
 
[
    uuid(1e123456-1f3c-1069-996b-00dd010fe676)
] 
dispinterface MyObject 
{ 
    properties: 
    methods: 
        [id(1), propget, bindable, defaultbind, displaybind] long x(); 
 
        [id(1), propput, bindable, defaultbind, 
         displaybind] HRESULT x(long rhs); 
}

См. также раздел

bindable

defaultbind

displaybind

helpcontext

helpfile

helpstring

Скрытые

В

Интерфейс

TYPEFLAGS

Синтаксис файла ODL

Пример файла ODL

Создание библиотеки типов с помощью MIDL

Дополнительные

Out

nonextensible

propget

propput

propputref

oleautomation

Ограничен

строка

uuid

vararg

Версия