Есть два класса С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!!!
В чем тут может быть дело?