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. COM + Interopを使用してC++アンマネージドコードでC#イベントを処理する
- 3. Accessでのエラー処理、VBa
- 4. COM Interopを使用してC#からVBAにオブジェクトを渡す
- 5. MS Office PIA Com Interopエラー
- 6. .Net COMでIEnumerableを理解するInterop
- 7. C#クライアントでのCOMコールバックの処理
- 8. ASP.NETのCOM Interop
- 9. Com Interop/MSXML
- 10. SilverlightとCOM Interop
- 11. C++ COM interopエラーを呼び出す:HRESULT 0x80131509
- 12. COM interop内のappdomains
- 13. comポートのイベント処理
- 14. Qt/C++エラー処理
- 15. Silverlightとcom-interopで印刷
- 16. .NET RTD/COM Excelユーザーのコンピュータ上のInteropエラー?
- 17. .NET COM Interop DLLでオブジェクト配列を使用するとエラーが発生する
- 18. C#との無料のCOM interop登録が可能ですか?
- 19. マルチスレッド環境でのCOMの処理
- 20. JSからC#への配列をCOM-Interopで返す
- 21. COMエラーをC#
- 22. Cでの短絡エラー処理
- 23. COMオブジェクトexcel interop clean up
- 24. com-interop for .net windowsサービス
- 25. C++ APIの設計とエラー処理
- 26. c#excel com interop:シート間でチャートを移動する
- 27. C#(COM interop)からCOM関数にBSTRを渡すための規約
- 28. Excel Interopエラー
- 29. 未処理のURLエラーの処理
- 30. C#でのキー処理の処理