Сущность технологии СОМ. Библиотека программиста :: Бокс Дональд
Страница:
482 из 528
Одна из методик реализации ConnectionPoint состоит в использовании того варианта методики вложения класса/композиции, которая учитывает различия в отношениях тождественности:
class Surfboard : public ISurfboard,
public IHazardousDevice,
public ISharkBait,
public IConnectionPointContainer {
LONG m_cRef; // СОM reference count
// счетчик ссылок СОМ
// Surfboards don't support multiple outbound interfaces
// of a given type, so it simply declares single pointers
// of each possible type of callback interface
// Surfboard не поддерживает несколько экспортируемых
// интерфейсов заданного типа, поэтому он просто
// объявляет одиночные указатели каждого возможного
// типа интерфейса обратного вызова
IShutdownNotify *m_pShutdownNotify;
ISurfboardUser *m_pSurfer;
// to deal with identity relationship of IConnectionPoint,
// define an IShutdownNotify-specific nested class + member
// для работы с отношением тождественности
// IConnectionPoint, определяем специфический для
// IShutdownNotify вложенный класс+член
class XCPShutdownNotify : public IConnectionPoint {
Surfboard *This(void);
// use fixed offset
// испопьзуем постоянное смещение
// IUnknown methods...
// методы IUnknown...
// IConnectionPoint methods...
// методы IConnectionPoint...
} m_xcpShutdownNotify;
// define an ISurfboardUser-specific nested class + member
// определяем специфический для IShutdownNotify вложенный класс+член
class XCPSurfboardUser : public IConnectionPoint {
Surfboard *This(void);
// use fixed offset
// используем постоянное смещение
// IUnknown methods...
// методы IUnknown...
// IConnectionPoint methods...
// методы IConnectionPoint...
} m_xcpSurfboardUser;
// IUnknown methods...
// методы IUnknown...
// ISurfboard methods...
// методы ISurfboard...
// IHazardousDevice methods...
// методы IHazardousDevice...
// ISharkBait methods...
// методы ISharkBait...
// IConnectionPointContainer methods...
// методы IConnectionPointContainer...
};
Следует указать, что экземпляры класса Surfboard будут иметь две отдельные реализации IConnectionPoint, одна из которых используется для присоединения интерфейсов обратного вызова IShutdownNotify, а вторая – для присоединения интерфейсов ISurfboardUser.
|< Пред. 480 481 482 483 484 След. >|