0
J'ai créé un contrôle ActiveX qui fonctionne sur tous les PC sauf deux sur l'emplacement du client. J'ai réduit le problème à l'échec de CoCreateInstance() qui échoue avec une erreur inconnue.CoCreateInstance échoue avec une erreur inconnue
Ce qui pourrait causer ce problème?
S'il vous plaît voir le code ci-dessous:
try
{
CComPtr<IDispatch> lpTDispatch;
//Following line generates an exception
HRESULT hr = lpTDispatch.CoCreateInstance(_bstr_t("XBrowseInvokerBean.Bean.1"));
//Following line do not get executed.
DWORD lasterror = GetLastError();
logFile->Write(CString("GetLastError : %u"), lasterror);
logFile->Write(CString("HRESULT Value: %X"), hr);
}
catch(CException *e)
{
//Exception does not get caught in this catch
LPSTR strError ="";
e->GetErrorMessage(strError,MAX_PATH);
logFile->Write("Exception:"+CString(strError));
CoUninitialize();
}
catch (_com_error e)
{
//Exception does not get caught in this catch
CString err2 = _com_error(HRESULT_FROM_WIN32(GetLastError())).ErrorMessage();
logFile->Write("COM ERROR2:"+CString(err2));
CoUninitialize();
}
catch(...)
{
//Exception get caught in this catch, Value returned is 0.
logFile->Write("Unknown exception occurred:%X",
HRESULT_FROM_WIN32(GetLastError()));
CoUninitialize();
}
C'est très étrange. Si vous regardez les sources de CComPtr :: CoCreateInstance() vous verrez qu'il ne lève jamais une exception. Essayez de scinder le code - faites de la construction _bstr_t une instruction distincte et passez le _bstr_t déjà construit dans CComPtr :: CoCreateInstance() comme instruction suivante. – sharptooth
Btw que se passe-t-il si vous demandez au débogueur de "casser quand une exception est levée" - quelle exception cela indique-t-il? – sharptooth