Первый раз в жизни нужно сделать класс как СОМ объект. Интерфейсы для объекта находятся в RTC API (VOIP). Интерфейсы имеют следующую иерархию наследования: IRTCPortManager3->IRTCPortManager2->IRTCPortManager->IUnknown. Все абстрактные функции, указанные в IRTCPortManager3, IRTCPortManager2 и IRTCPortManager, в моем классе реализованы, без этого были ошибки компиляции. Для интерфейса IUnknown, который тоже содержит несколько абстрактных функций, я ничего не писал, но компилятор не ругается. Никаких данных для класса в интерфейсах не объявлено.
Проблема заключается в том, что при попытке создания моего класса и по CComObject и по new вылетает "access violation" — попытка доступа по адресу 0. Вероятно класс должен содержать какие-то поля данных. Вопрос — какие? Я объявляю класс так как в имеющихся примерах, и никакие данные в примерах не объявляются. Подскажите, где проблема.
Объявление моего класса:
class ATL_NO_VTABLE MyPortManager : public CComObjectRootEx<CComMultiThreadModel>, public IRTCPortManager3 {
protected:
private:
public:
MyPortManager();
~MyPortManager();
.
. — методы из интерфейсов IRTCPortManager3, IRTCPortManager2 и IRTCPortManager — все пока заглушки
.