Ich habe eine COM-Komponente von Drittanbietern mit seiner C++ - Schnittstelle in VC++. Ich stürze mich in den folgenden Anruf, der meine Anwendung stürzt. Wie kann ich von dieser Funktion, die nicht wirklich Teil meiner Anwendung ist, ordnungsgemäß wiederherstellen?Wie von COM-Fehler ordnungsgemäß wiederherstellen?
inline _RecordsetPtr IGLibMgr::GetLibInfo (_bstr_t LibPath) {
struct _Recordset * _result = 0;
HRESULT _hr = raw_GetLibInfo(LibPath, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _RecordsetPtr(_result, false);
}
Es stürzt in der letzten Zeile ab. Ich glaube nicht, dass ich diesen Code ändern kann, da es COM-Sachen von Drittanbietern sind. Welche Möglichkeiten habe ich wirklich? Ich will nur Nachricht Box zum Benutzer und zurückkommen würde anmutig.
Bist du * sicher * es ist nicht "abstürzt", weil du keinen '_com_error &' fällst, der wegen eines 'FAILED (_hr)' Status geworfen wird? Wenn Sie dies debuggten, würde ich * fast * garantieren, dass das erzeugte Ergebnis das SEERITY-Bit hat (das Ding, das bewirkt, dass FAILED() 'nicht auf Null auswertet) – WhozCraig
Ich bin nur nicht vertraut mit COM, muss ich fangen es mit catch() blockieren? – zar
Ja. Die allgemeine Regel ist, wenn eine Ausnahme ausgelöst werden kann, müssen Sie entweder fangen und behandeln, oder *** *** wissen, dass Ihr Anrufer dies tun wird. Es hört sich so an, als ob nichts getan wird. Die 'comutil'-Unterstützungsebene von MSVC ist ziemlich stark; fast eine eigene Methode. Ich habe ein Beispiel dafür, wie Sie damit umgehen können. – WhozCraig