преобразование LPDISPATCH
От: Uuuahaha  
Дата: 12.10.05 06:10
Оценка:
Доброгог времени суток.

Такая вот проблема возникла.
Я сам в СОМ не силен.

Стал собирать проект, не мой, в 2003 студии.
Есть такая строчка в коде


LPDISPATCH pDisp = NULL;
............... //получение pDisp        
m_obj = pDisp;
...............

Comp::ICompInterPtr m_obj;

Так трабла в том что в 6 m_obj инициализировалась, а в 7 NULL.

Может что посоветует кто.
Re: преобразование LPDISPATCH
От: Константин Ленин  
Дата: 12.10.05 08:49
Оценка:
Здравствуйте, Uuuahaha, Вы писали:

U>Доброгог времени суток.


U>Такая вот проблема возникла.

U>Я сам в СОМ не силен.

U>Стал собирать проект, не мой, в 2003 студии.

U>Есть такая строчка в коде


U>
U>LPDISPATCH pDisp = NULL;
U>............... //получение pDisp        
U>m_obj = pDisp;
U>...............
U>

U>Comp::ICompInterPtr m_obj;

U>Так трабла в том что в 6 m_obj инициализировалась, а в 7 NULL.


U>Может что посоветует кто.


pDisp->QueryInterface( __uuidof(Comp::ICompInterPtr), (void**) &m_obj );
Re[2]: преобразование LPDISPATCH
От: CString  
Дата: 12.10.05 10:22
Оценка:
Здравствуйте, Константин Ленин, Вы писали:

КЛ>pDisp->QueryInterface( __uuidof(Comp::ICompInterPtr), (void**) &m_obj );


не помогло
Re: преобразование LPDISPATCH
От: slava_529872  
Дата: 12.10.05 13:48
Оценка:
А что такое ICompInterPtr? Это define или смарт-поинтер или ещё что-нибудь ? если смарт поинтер — пришли его operator =() или конструктор.
Re[2]: преобразование LPDISPATCH
От: Uuuahaha  
Дата: 13.10.05 06:13
Оценка:
Здравствуйте, slava_529872, Вы писали:

_>А что такое ICompInterPtr? Это define или смарт-поинтер или ещё что-нибудь ? если смарт поинтер — пришли его operator =() или конструктор.


Труба дело, случайно заметил

Вообщем в 7 студии при импорте tlb файла, генерятся tli и tlh, как и в 6, но есть некоторое различие

в 6 так

//
// Smart pointer typedef declarations
//

_COM_SMARTPTR_TYPEDEF( ICompInter, __uuidof(IDispatch));


а в 7 так

//
// Smart pointer typedef declarations
//

_COM_SMARTPTR_TYPEDEF(ICompInter, __uuidof(ICompInter));


и изза этого не работал оператор.

Решил это дело на мой взгляд не совсем корректно

_com_ptr_t< _com_IIID< Comp::ICompInter, &__uuidof(IDispatch)> > m_obj;

вместо

Comp::ICompInterPtr m_obj;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.