tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルActiveXコントロールからの例外
記事No13753
投稿日: 2009/06/20(Sat) 14:01
投稿者みさき
ActiveXコントロールからAfxThrowOleDispatchExceptionで、
VB6.0のフォームに例外を通知したとき、

オートメーションエラーのエラーコードとエラーディスクリプションになってしまうのですが、
AfxThrowOleDispatchExceptionのパラメータで設定した
エラーコード、エラーの説明は、どのようにしたら参照できるのでしょうか?

[ツリー表示へ]
タイトルRe: ActiveXコントロールからの例外
記事No13754
投稿日: 2009/06/20(Sat) 16:12
投稿者オショウ
> オートメーションエラーのエラーコードとエラーディスクリプションになってしまうのですが、
> AfxThrowOleDispatchExceptionのパラメータで設定した
> エラーコード、エラーの説明は、どのようにしたら参照できるのでしょうか?

  http://homepage1.nifty.com/macbs/auto2.htm
  ここの後半と・・・

  http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard12.htm
  このことかな?

以上。参考まで
  

[ツリー表示へ]
タイトルRe^2: ActiveXコントロールからの例外
記事No13755
投稿日: 2009/06/20(Sat) 17:40
投稿者みさき

>   http://homepage1.nifty.com/macbs/auto2.htm
>   ここの後半と・・・
>
>   http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard12.htm
>   このことかな?
>
> 以上。参考まで
>   

オショウ 様
回答ありがとうございます。

しかし、残念ながらhttp://homepage1.nifty.com/macbs/auto2.htm
に記載されている方法ではうまく行きませんでした。
VBの一部のバージョンとは確か、4.0というのを調査中に見かけたので、VB6.0ではAfxThrowOleDispatchExceptionが問題なく使えると判断していたのですが…。

On Error GotoでErrオブジェクトを参照すると、AfxThrowOleDispatchExceptionで任意に設定した、エラーコードとエラーディスクリプションは取得できず、

Err.Number = -2147417848
Err.Description = '*******' メソッドは失敗しました: '*******' オブジェクト
Err.LastDllError = 0
Err.Source = ********
Err.HelpFile = C:\WINDOWS\Help\VBENLR98.CHM
Err.HelpContext = 1000440

になってしまいます。

ちなみにVBのデバッグ時と、exeファイルを実行したときのErr.Descriptionの内容が違うのは何故なのでしょうか?
exeファイルを実行したときは、オートメーションエラーとなります。

[ツリー表示へ]
タイトルRe^3: ActiveXコントロールからの例外
記事No13756
投稿日: 2009/06/20(Sat) 18:15
投稿者オショウ
> >   http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard12.htm

  この方法は試されたんですか?

  AfxThrowOleDispatchExceptionは、On Error GoTo では取れなかったと
  思うのですが・・・(VB6やめたの大昔なもので・・・)

  因みに、MFCでActiveX作るのも大昔だったもので、記憶に定かではありません。

※ HDD故障で昔作成したソースコードの大半は消滅してしまっているので・・・
  あしからず。

以上。

[ツリー表示へ]
タイトルRe^4: ActiveXコントロールからの例外
記事No13757
投稿日: 2009/06/20(Sat) 21:23
投稿者みさき
オショウ様
ご回答ありがとうございます。

> > >   http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard12.htm
>
>   この方法は試されたんですか?
>
tryを使用する方法のことでしょうか?
VB6.0の場合はtry catchは使えなかったですよね?

[ツリー表示へ]
タイトルRe^5: ActiveXコントロールからの例外
記事No13758
投稿日: 2009/06/20(Sat) 21:40
投稿者オショウ
> tryを使用する方法のことでしょうか?
> VB6.0の場合はtry catchは使えなかったですよね?

  をを〜すいません。
  頭の中がこんがらがってます。(2002からずっと.NETなもので)

  IDE環境とEXEでエラー内容が異なるのは回避のしようがなかった
  かもです。

  ActiveX側で例外取って、エラーコード(番号)でVB6に返すか、
  VB6側から必ず何等かの機能を呼び出したらエラーが無かったか
  エラーコードを読み出すようなプログラム構造にしてみては?

以上。参考まで・・・

[ツリー表示へ]
タイトルRe^3: ActiveXコントロールからの例外
記事No13759
投稿日: 2009/06/20(Sat) 22:17
投稿者魔界の仮面弁士
> >   http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard12.htm
> >   このことかな?
VB6 の場合、せめてこちら。
http://homepage1.nifty.com/rucio/main/shokyu/jugyou22.htm

# まぁ、ここで説明されている内容は、おそらく既にご存知かと思いますが…。


> AfxThrowOleDispatchExceptionで任意に設定した、エラーコードとエラーディスクリプションは取得できず、
MFC は専門外なのですが、エラーコードが 0x80040000 番台かどうかを
確認してみてください。確か、HRESULT の上位 16 bit は意味が決まっていて、
自由に使えるのは下位 16 bit だけだったはず。
(VB 的には、vbObjectError が &H80040000 を意味します)

// 訂正
すみません。WORD 値しか指定できないので、今回、上位は関係無いようです。

http://support.microsoft.com/kb/140590/en-us を見ると、VB4/VC++4.1 当時は
AfxThrowOleDispatchException は使うな、COleDispatchException で代用せよと
されていたようですね。それゆえ、先の
http://homepage1.nifty.com/macbs/auto2.htm に書かれていた対処となるようです。

ただし、 http://support.microsoft.com/kb/167668/ja などを見た限りでは、
AfxThrowOleDispatchException が使われているようなので、今はこの制限は
解決しているのかも知れませんが。

[ツリー表示へ]