CComObject<MyClass>::CreateInstance(&pMyClass);
От: Dimusik Россия  
Дата: 10.10.02 05:39
Оценка:
Доброго времени суток всем!
Возникла необходимость, чтобы COM-объект имел конструктор с параметром.
Код:

HRESULT hr;

CComObject<MyClass>* pMyClass = NULL;
hr = CComObject<MyClass>::CreateInstance(&pMyClass);
...........

вызывает только конструктор по умолчанию. Не пойму как передать параметр в конструктор

Заранее спасибо!
Re: Делать метод типа Init или класс CMyComObject
От: Vi2 Удмуртия http://www.adem.ru
Дата: 10.10.02 06:04
Оценка: 5 (2)
Здравствуйте Dimusik, Вы писали:

D>Возникла необходимость, чтобы COM-объект имел конструктор с параметром. Код:

D>HRESULT hr;
D>CComObject<MyClass>* pMyClass = NULL;
D>hr = CComObject<MyClass>::CreateInstance(&pMyClass);
D>...........

D>вызывает только конструктор по умолчанию. Не пойму как передать параметр в конструктор

Есть же декларация класса CComObject:
class CComObject : public Base
{
    CComObject(void* = NULL)
    {
        _Module.Lock();
    }

которая говорит, что конструктор CComObject<MyClass> вызовет железно конструктор без параметров для твоего класса MyClass. Нет способов обойти это, не трогая реализацию CComObject. Можно в принципе сделать шаблон CMyComObject<MyClass>, в котором реализовать свою стратегию инициализации. Это тягомотно, но осуществимо.

Другое решение — делать метод типа Init, в который можно передать параметры и который не указывается в интерфейсах. Это будет как бы отложенный конструктор. Это не лучшее решение, всё-таки конструктор уже был вызван, но другого способа нет.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Спасибо
От: Dimusik Россия  
Дата: 10.10.02 06:20
Оценка:
Вот спасибо тебе Vi2. Разъяснил. Я вой ответ оценил "СУПЕР"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.