- - PR -
C#で作成したCOMのエラー情報を C++のプログラムから取得したい
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-06 19:19
現在、以下の構成でプログラムを作成しています。
COMサーバ : VC#.NET COMクライアント : VC++6.0 呼び出しなどは正常にできているのですが、COMサーバで例外を返し、それをクライアント側 で catch すると、「Unknown Error」としか取得できずに困っています。
としていますが、catch はできるものの、エラーメッセージが取得できません。 VC#.NET からは Exception クラスではなく、別の例外クラスを投げないといけない のでしょうか? どなたかご存知の方いらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。 | ||||||||
|
投稿日時: 2004-12-08 08:27
COM 連携でなくたって、普通は Exception をそのまま投げるような無粋な真似はしません。 .NET の一般的な例外については、COM 連携が適切な COM エラーに変換してくれるので、そのっま投げればよいです。 もっと細かく制御したければ COMException を使います。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2004-12-08 19:05
返信ありがとうございます。 COMException という例外クラスがあるようですが、具体的にどのようにエラー情報を埋め込めばよいのでしょうか? お手数ですがアドバイスをいただければと思います。 | ||||||||
|
投稿日時: 2004-12-08 21:56
COMException クラスのコンストラクタで、COMException.HResult 値にエラーコードを設定します。 どんなエラーコードを与えるのが適切かは、どんなエラーが発生しているかによって異なります。(だって、発生しているエラーが何であるかを伝えるのが役目ですから) でも、そんなことが必要なのはよほど珍しいエラーが発生した時です。 通常は
で十分です。 .NET の例外が、どのような COM エラーと対応するかは、ヘルプのどこかに解説があったはずです。(トピック名とか忘れました) _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2004-12-09 13:47
プログラム内で発生する例外に関してはC++側で ErrorMessage を取得できるのですが、自分で Exception を生成して投げているケースにおいては「Unknown Exception」となっているようです。 エラーメッセージだけを設定した Exception ではダメということなのでしょうか? | ||||||||
|
投稿日時: 2004-12-09 14:50
単純には駄目ですね。 コンテナ側で、コンポーネントの IErrorInfo を扱うようにすればよいのかもしれませんが、私はやったことがないので詳細が分かりません。 COM 連携が自動変換してくれないエラーでも、COM エラーにマップが可能=規定の HRESULT 値なエラーなら、COMException を throw してください。 COM エラーにマップが不可能なエラーについては、前述のようにコンテナ側で努力するか、あまりお勧めではありませんが、HRESULT 値のユーザ定義可能な範囲を使用して COMException を throw することになると思います。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ |
1