Dies ist how to throw gewöhnliche Win32 Fehler korrekt, automatisch die Fehlerbeschreibung abrufen, und es funktioniert wunderbar gut:Wie man eine std :: system_error Ausnahme von einem FAILED (HRESULT) wirft?
if (!SomeWinFunc()) {
throw std::system_error(GetLastError(),
std::system_category(),
"SomeWinFunc crashed badly");
}
aber ich bin unsicher, wie sie mit COM-Fehler zu behandeln, die idiomatically wie folgt geprüft werden:
HRESULT hr = comObj->SomeFunc();
if (FAILED(hr)) {
throw std::system_error(hr, // <-- is it correct here?
std::system_category(),
"SomeFunc crashed right now");
}
ist es richtig, ein HRESULT
zu system_error
passieren, oder es gibt einen anderen Weg, um Ausnahmen von einer COM-Funktion zu werfen?
Haben Sie damit irgendwas erreicht? –
@MichaelGunter, ich habe immer noch keine 100% korrekte Lösung implementiert (möglicherweise beginnend mit Ihrem Code), aber da meine Bedürfnisse einfach mit System-COM-Objekten zu tun haben, funktioniert der Ansatz, den ich in der Frage geschrieben habe, mehrere Tests. Ich plane, tiefer zu gehen, sobald ich Zeit finde. – Rodrigo