2010-05-26 14 views
5

Czy ktoś może podać jakieś informacje o tym, jak programowo przetłumaczyć wartości HRESULT (http://en.wikipedia.org/wiki/HRESULT) na wiadomość zrozumiałą dla człowieka?Przekształcanie HRESULT w czytelną wiadomość

Wiem, że narzędzie ERR.EXE to robi, ale moja aplikacja musi wyświetlać moim użytkownikom znaczącą wiadomość zamiast tajemniczego 0x800A03EC.

+0

Czy tu czegoś brakuje? Dlaczego nie możesz użyć polecenia "Spróbuj ... Catch" i wyświetlić komunikat o błędzie użytkownikom? –

+0

@Otaku, robię Excel połączeń VSTO, niektóre z tych połączeń zwróci HRESULT, gdy zawiedzie i nic więcej w części wiadomości COMException. – code4life

+0

@ToddMain, ponieważ dobrze jest zapisać identyfikator wyjątku, aby nie wyświetlać go od razu. Każda klasa nie powinna wiedzieć, czy pracuję z GUI, czy z terminalem, i jakiego rodzaju GUI to jest, po kolei nie mogę pokazać wiadomości na raz. W C++ jestem w każdej klasie wprowadził zmienną «LastError». Czy to nie jest dobry pomysł w C#? –

Odpowiedz

3

Nie ma wbudowanej obsługi generowania wiadomości z HRESULT o tej wartości. Komponent COM musi sam to zaimplementować, korzystając z interfejsu IErrorInfo.

Obsługa współdziałania CLR wbudowana w .NET już to robi automatycznie, nigdy nie powinieneś potrzebować pomocy. Automatycznie generuje odpowiedni wyjątek, gdy zauważy, że metoda interfejsu COM zwraca kod błędu. Właściwość Message jest inicjowana z IErrorInfo. Jeśli nie dostaniesz przyzwoitego komunikatu, serwer COM po prostu go nie dostarczy.

Co jest prawdopodobne dla 0x800a03ec, jest to niski poziom błędu w pakiecie Excel, z wieloma błędami. Możesz znaleźć wiele trafień dla niego przez Google "błąd programu Excel 1004".

+0

Ale może jest możliwe, aby jakoś wyrzucić wyjątek z niestandardowym HRESULT? W ten sposób wyjątek miałby wiadomość informacyjną itp. –

3

Czy wypróbowałeś funkcję FormatMessage? Możesz go używać z C# przy użyciu mechanizmu PInvoke.

Powiązane problemy