COM呼び出し可能ラッパー/ COM Interopを介して公開しているExcel VBAからC#DLLが呼び出されています。私は、VBAクライアントにC#のコードで発生する例外を渡すことができるようにしたい。これを行うための推奨される方法はありますか?ありがとう。C#/ VBA COM Interopでのエラー処理
答えて
年前私はCOM関数呼び出しに関するエラー情報を返す漠然とした思い出を持っています。 COM関数は例外を返すべきではありません。 COM関数でエラーが発生したという事実は、戻り値によって通知されます。 S_OK(0)は成功を意味しました。負の数は失敗を意味します。異なるエラー番号を使用して基本エラータイプを渡すこともできますが、より具体的なエラー情報については、COMオブジェクトにIErrorInfoインターフェイスを実装する必要がありました。
このようにして、Visual Basic 6.0とVisual Studio 2000はVisual BasicではCOMエラーをうまく処理しましたが、VBAの古いバージョンでは問題ありませんでした。
誰かがCOMをもっと最近使ったことがある人は、詳細を記入し、私の記憶が何年も曇っている場所を修正できるかもしれません。
例外をドキュメント化されたCOMエラーに変換する新しいCOMラッパーコードを実装するのは簡単な一般的なことではなく、手作業でコード化されたバージョンを作成することもできますが、COMプログラミングを理解する必要があります。
.NETオブジェクトを再設計して、オブジェクト内でgetlasterror()メソッドを呼び出すことによってエラーの詳細を報告できるようにすることは、賢明な回避策になります。
HRESULTエラーコードをVBAまたは他のCOMベースの発信者に返信する独自の例外を作成することは可能です。
public class ComMessageException : Exception
{
public ComMessageException(string message)
:base(message)
{
HResult = unchecked((int)0x80004005);
}
}
Here is an MSDN articleプロセスを説明しています。ここではE_FAILを使用する例を示します。
VB6で同じVBAエラーをサポートする必要があります。選択したHRESULTとともに、選択したエラーメッセージがユーザーに表示されます。
- 1. VBA/C#COM interop - エラー430
- 2. C#COM INTEROP in C++
- 3. COM + Interopを使用してC++アンマネージドコードでC#イベントを処理する
- 4. Taskscheduler COM Interop C# - ログオンタスク
- 5. .Net COMでIEnumerableを理解するInterop
- 6. MS Office PIA Com Interopエラー
- 7. C#クライアントでのCOMコールバックの処理
- 8. COM Interopを使用してC#からVBAにオブジェクトを渡す
- 9. Accessでのエラー処理、VBa
- 10. ASP.NETのCOM Interop
- 11. Com Interop/MSXML
- 12. if ... then VBAでのエラー処理
- 13. ReflectionTypeLoadExceptionとCOM-Interop
- 14. SilverlightとCOM Interop
- 15. COM interop内のappdomains
- 16. C++ COM interopエラーを呼び出す:HRESULT 0x80131509
- 17. Excel VBA - Userform vlookupエラー処理
- 18. Excel VBAエラー処理コード
- 19. comポートのイベント処理
- 20. COM Interop in Mono 2.0
- 21. Silverlightとcom-interopで印刷
- 22. Qt/C++エラー処理
- 23. C#との無料のCOM interop登録が可能ですか?
- 24. .NET RTD/COM Excelユーザーのコンピュータ上のInteropエラー?
- 25. JSからC#への配列をCOM-Interopで返す
- 26. マルチスレッド環境でのCOMの処理
- 27. プロセスのエラー処理C#
- 28. CFReadStreamの処理エラー - Obj-C
- 29. com-interop for .net windowsサービス
- 30. COMオブジェクトexcel interop clean up