ВУЗ:
Составители:
Рубрика:
8
Рассмотрим несколько примеров обращения к интерфейсам. Предположим, что
у созданного нами COM-объекта есть интерфейс ICalcSrv, содержащий ме-
тод Calculate.
Пример 1. Использование оператора as.
var
Srv: ICalcSrv;
begin
…
// Создаем COM объект и запрашиваем у него интерфейс.
// Константа Class_Calcsrv обозначает CLSID
// COM-объекта и описывается в библиотеке типов
Srv := CreateComObject (Сlass_Сalcsrv) as ICalcSrv;
// Вызываем метод Calculate интерфейса ICalcSrv
Srv.Calculate;
// Освобождаем интерфейс
Srv := Nil;
end;
Оператор as действует в данном фрагменте кода по такому же принципу , что и
при приведении типов объектов , но позволяет перейти к любому интерфейсу , а
не только к дочернему. Фактически компилятор встраивает здесь вызов метода
QueryInterface.
Пример 2. Явное использование метода QueryInterface.
var
Srv: ICalcSrv;
IU: IUnknown;
…
IU := CreateComObject (Class_Calcsrv);
// Константа IID_ICalcsrv обозначает IID интерфейса
if IU.QueryInterface(IID_ICalcsrv, Srv) <> S_OK then
ShowMessage('Интерфейс не найден')
else
Srv.Calculate;
Этот способ предпочтителен, когда точно не известно , имеется ли у объекта
требуемый интерфейс. Остальные способы при отсутствии интерфейса вызы-
вают исключительную ситуацию.
Пример 3. Использование компонентного класса .
var
Srv: ICalcSrv;
…
Srv := CoEditSrv.Create;
Srv.Calculate;
…
8 Рассмотри м несколько при меров обращ ени яки нтерфей сам. Пред полож и м, что у соз д анного нами COM-объекта есть и нтерфей сICalcSrv, сод ерж ащ и й ме- тод Calculate. При мер1. И спольз ов ани еоператора as. var Srv: ICalcSrv; begin … // Создаем COM объект и запрашиваем у него интерфейс. // Константа Class_Calcsrv обозначает CLSID // COM-объекта и описывается в библиотеке типов Srv := CreateComObject (Сlass_Сalcsrv) as ICalcSrv; // Вызываем метод Calculate интерфейса ICalcSrv Srv.Calculate; // Освобождаем интерфейс Srv := Nil; end; О ператорas д ей ств уетв д анном фрагментекод а по такому ж епри нци пу, что и при при в ед ени и ти пов объектов , но поз в оляетперей ти клю бому и нтерфей су, а нетолько кд очернему. Ф акти чески компи ляторв страи в аетз д есь в ы з ов метод а QueryInterface. При мер2. Я в ноеи спольз ов ани еметод а QueryInterface. var Srv: ICalcSrv; IU: IUnknown; … IU := CreateComObject (Class_Calcsrv); // Константа IID_ICalcsrv обозначает IID интерфейса if IU.QueryInterface(IID_ICalcsrv, Srv) <> S_OK then ShowMessage('Интерфейс не найден') else Srv.Calculate; Э тот способ пред почти телен, когд а точно не и з в естно, и меется ли у объекта требуемы й и нтерфей с. О стальны е способы при отсутств и и и нтерфей са в ы з ы - в аю ти склю чи тельную си туаци ю . При мер3. И спольз ов ани екомпонентного класса. var Srv: ICalcSrv; … Srv := CoEditSrv.Create; Srv.Calculate; …
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »