Создание объекта через CComObject
От: Alex1000000  
Дата: 02.06.09 11:09
Оценка:
Первый раз в жизни нужно сделать класс как СОМ объект. Интерфейсы для объекта находятся в 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 — все пока заглушки
.

DECLARE_NO_REGISTRY()
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(MyPortManager)
COM_INTERFACE_ENTRY(IRTCPortManager3)
END_COM_MAP()
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.