2009-09-16 6 views
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(); 
} 
+1

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

+0

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

Répondre

0

Il est presque certainement en raison d'une dépendance manquante. Vérifiez registre pour voir si XBrowseInvokerBean.Bean et tout ce dont il dépend est installé.

Questions connexes