Сущность технологии СОМ. Библиотека программиста :: Бокс Дональд
Страница:
471 из 528
Простейший способ выразить диспинтерфейс на IDL – это использовать ключевое слово dispinterface :
[uuid(75DA6450-DD0F-11d0-8C58-0880C73925BA)] dispinterface DPrimeManager {
properties: [id(1), readonly] long MinPrimeOnMachine;
[id(2)] long MinPrime;
methods: [id(3)] long GetNextPrime([in] long n);
}
Этот синтаксис вполне читабелен; однако он предполагает, что вызывающая программа будет всегдаобращаться к свойствам и методам объекта через IDispatch . История показала, что по мере развития программных сред этапа разработки и выполнения они часто становятся способными использовать обычные интерфейсы СОМ. Для обеспечения того, чтобы обращение к диспинтерфейсу было успешным и в будущих средах подготовки сценариев, как правило, лучше моделировать интерфейс как двойственный , или дуальный (dual interface) .
Двойственные интерфейсы являются обычными интерфейсами СОМ, наследующими от IDispatch . Поскольку IDispatch является базовым интерфейсом, то он абсолютно совместим с полностью интерпретируемыми клиентами сценариев. В то же время этот интерфейс совместим вверх со средами, которые могут непосредственно связываться со статически определенным интерфейсом СОМ. Ниже приведено IDL-определение для двойственного варианта интерфейса DPrimeManager :
[object, dual, uuid(75DA6450-DD0F-11d0-8C58-0080C73925BA)] interface DIPrimeManager : IDispatch {
[id(1), propget]
HRESULT MinPrimeOnMachine( [out, retval] long *pval); [id(2), propput]
HRESULT MinPrime([in] longval);
[id(2), propget] HRESULT MinPrime([out, retval] long *pval);
[id(3)] long GetNextPrime([in] long n);
}
Заметим, что этот интерфейс наследует IDispatch , а не IUnknown . Также отметим, что данный интерфейс имеет атрибут [dual] . Этот атрибут заставляет сгенерированную библиотеку типов включить в себя диспетчерский вариант интерфейса, который совместим со средами, не поддерживающими двойственные интерфейсы.
|< Пред. 469 470 471 472 473 След. >|