Es gibt keine integrierte Unterstützung für das Generieren von Nachrichten aus einem HRESULT mit diesem Wert. Die COM-Komponente muss dies mithilfe der IErrorInfo-Schnittstelle selbst implementieren.
Die CLR-Interop-Unterstützung, die in .NET integriert ist, tut dies automatisch, Sie sollten nie Hilfe benötigen. Wenn eine COM-Schnittstellenmethode einen Fehlercode zurückgibt, wird automatisch eine entsprechende Ausnahme ausgelöst. Die Message-Eigenschaft wird von IErrorInfo initialisiert. Wenn Sie nichts vernünftiges als eine Nachricht bekommen, dann liefert der COM-Server es einfach nicht.
Welche ist wahrscheinlich für 0x800a03ec, es ist ein Grab-Bag Low-Level-Excel-Fehler mit vielen Fehlerursachen. Sie können viele Treffer dafür finden, indem Sie "Excel Fehler 1004" googeln.
Fehle ich hier etwas? Warum können Sie nicht "Try ... Catch" verwenden und Ihren Benutzern die Fehlermeldung anzeigen? –
@Otaku, ich mache Excel VSTO Aufrufe, einige dieser Aufrufe werden ein HRESULT zurückgeben, wenn sie fehlschlagen und nichts anderes im Nachrichtenteil der COMException. – code4life
@ToddMain, weil es eine gute Idee ist, eine Ausnahme-ID zu speichern, um sie nicht sofort anzuzeigen. Eine Klasse sollte nicht wissen, ob ich mit GUI oder mit einem Terminal arbeite, und welche Art von GUI es ist, nacheinander kann ich keine Nachricht auf einmal zeigen. In C++ habe ich in jeder Klasse eine Variable «LastError» erstellt. Ist das nicht eine gute Idee in C#? –