Здравствуйте OlegO, Вы писали:
OO>Чтобы понять, что происходит достаточно посмотреть .CPP файл, которые сгенерила студия, OO>для твоего ActiveX.
OO>В методах идет вызов метода CWnd::InvokeHelper, а он в случае ошибки генерит OO>исключения COleException если код ошибки равен DISP_E_EXCEPTION, или OO>COleDispatchException в остальных случаях.
OO>для простоты можешь перехватывать все исключения catch(...)
OO>Если исключения не приходят, значит смотри код ActiveX'а
когда я по шагам смотрела, что происходит, он мне показывает, что в методе у меня появляется исключение типа COleDispatchException
В другом клиенте я получаю ошибку другим способом (этот приём везде описан):
hr = pInterface->QueryInterface(IID_ISupportErrorInfo,(void**)&pISER);
if(SUCCEEDED(hr))
{
if(SUCCEEDED(pISER->InterfaceSupportsErrorInfo(riid)))
{
IErrorInfo *pEI;
if (SUCCEEDED(GetErrorInfo(NULL,&pEI)))
{
BSTR desc; pEI->GetDescription(&desc);
char buff[80];
WideCharToMultiByte(CP_ACP,NULL,desc,-1,buff,80,NULL,NULL);
cout << buff << endl;
SysFreeString(desc); pEI->Release();
}
}
pISER->Release();
}
pInterface->Release();
и там все работает, но мне для простоты написания клиента нужен catch.
Сейчас у меня как раз исключение и ловиться на catch(...), но мне надо конкретно.