Основой любого объекта является интерфейс IUnknown. Этот интерфейс используется для:
Реализация интерфейса IUnknown превращает объект в объект COM. Реализуется этот интерфейс по определенным правилам. Для его реализации необходимо, чтобы класс унаследовал этот абстрактный интерфейс и реализовал его методы. Наследование производится так.
#include "stdafx.h" #include "ole2.h" class COleTestAbstract { public: virtual void Msg()=0; }; class COAbsatract : public COleTestAbstract, public IUnknown { public: void Msg(); };
У данного интрефейса есть три метода.
Каждый объект читает количество ссылок на себя. Для этого в классе необходимо завести переменную, в которой будет храниться количество обращений. Обычно это переменная типа ULONG хотя можно использовать и int. При объявлении методов используются определения STDMETHOD или STDMETHOD_, чем они отличаются ??? Первое объявление всегда возвращает HRESULT, а второе в зависимости от первого указанного типа.
STDMETHOD (QueryInterface) // вернет HRESULT STDMETHOD_ (ULONG, AddRef) // вернет ULONG
IUnknown является главным интерфейсом. Через него производится доступ к другим интерфейсам. Ну типо того, что Вы спрашиваете у объекта умеет ли он делать это, а в ответ объект возврашает вам либо ошибку либо указатель на метод.