Russian Qt Forum

Qt => ActiveX => Тема начата: dr_Begemot от Ноябрь 12, 2009, 13:59



Название: проблема с экспортом класса
Отправлено: dr_Begemot от Ноябрь 12, 2009, 13:59
Есть два класса СClass1 и CClass2. CClass2 порожден от класса CClass1.
Так-же есть класс CMain.

Классы СMain и CClass1 экспортриуется.

Код:
QAXFACTORY_BEGIN("{EDDCD047-CF0D-4418-B386-71B98DBCD9FE}", 
"{6991C64F-0665-47c5-99F6-F82FD3B79D83}")
QAXCLASS(CMain)
QAXCLASS(CClass1)
QAXFACTORY_END()

У класса CMain есть метод, возвращающий в качестве результата класс CClass1.
В MFC клиенте вызов происходит следующим образом:

Код:
	CWnd* pWnd = GetDlgItem(IDC_MAIN1);
ICMainPtr pMain;
if(pWnd){
IUnknownPtr pIUnknown = pWnd->GetControlUnknown();
pIUnknown.QueryInterface(DIID_ICMain, (void**)&pMain);
}

ICClass1Ptr pClass;
pClass = pMain->getMyClass();
try{
pClass->startAnyMethod();
}catch(_com_error &er){
str = er.ErrorMessage();
}

А теперь внимание вопрос:

Если метод CMain::getMyClass реализован так:
Код:
CClass1 *CMain::getMyClass(){
  CClass1 *c = new CClass1();
  return c;
}

То все отлично работает!
Но если он реализван так:
Код:
CClass1 *CMain::getMyClass(){
  CClass2 *c = new CClass2();
  return (CClass1*)c;
}

То в клиенте программа вылетает при попытке вызова pClass->startAnyMethod();, причем не в блок catch!!!
В чем тут может быть дело?