Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Урок 18. Метод QueryInterface в действии / Библиотека ATL / Visual C++
Visual C++. ATL Урок 18. Метод QueryInterface в действии
Метод QueryInterface позволяет выяснить, поддерживает ли наш объект некоторый COM-интерфейс. Этот метод должен быть в любом COM-классе, так как все такие классы есть потомки интерфейса IUnknown (который содержит этот интерфейс).
Фактически этот метод позволяет выяснить, что в реальности записано в нашем объекте.
Рассмотрим это все на примере.
Создадим два ATL-компонента в одной dll - Obj1 и Obj2 (их классы будут CObj1 и CObj2 соответственно). Добавим во второй компонент два метода IsObject1 и IsObject2. Они предназначены для выяснения, не является ли наш компонент Obj1 или Obj2 - т. е. если ответ положительный (компонент является соответствующим объектом), то метод возвратит 1, в протифном случае метод возвратит 0.
Как вы видите, после вызова QueryInterface во втором параметре либо что-то оказывается (в этом случае объект поддерживает интерфейс, определяемый первым параметром), либо ничего не оказывается (в этом случае объект не поддерживает интерфейс, определяемый первым параметром).
В этом коде первым параметром метода QueryInterface мы берем идентификаторы для наших двух интерфейсов (IID_IObj1 и IID_IObj2). Их можно посмотреть, например, в объявлении наших классов:
class ATL_NO_VTABLE CObj1 :
...
public IDispatchImpl<IObj1, &IID_IObj1, &LIBID_QINTERFLib>
...
Соответсвующий код в VB может быть, например, таким (тут q2 - это экземпляр нашего второго компонента):
PrivateSub Command1_Click()
Dim k AsInteger
k = q2.IsObject1()
MsgBox k
k = q2.IsObject2()
MsgBox k
EndSub
Этот код, разумеется, сначала покажет два messagbox'а: первый с 0, второй - с 1.
Накладки на внутренние пороги на мазда сх5 tuning-jeep.ru.