tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルErr.Raiseの素朴な疑問
記事No12702
投稿日: 2008/07/04(Fri) 17:16
投稿者sak
お世話になります。

環境はWinXP(SP2)+VB6(SP6)です。

Err.Raiseについて疑問に思う事があり検索などをしても
思うような回答にたどりつけないのでご存知の方お教え
ください。

【質問】
ユーザー定義エラーで次のようなコードを実行した時、

Err.Raise vbObjectError + 513

上位モジュールでエラートラップした際、Err.Number が
513 となっていることを期待していたのですが、実際には
-2147220991 になるのはなぜでしょうか?

トラップした際に、何らかの操作をしないと自分が発生さ
せたエラー番号512を取得できないのでしょうか?
(例えば、&HFFFF& でAndをとるなど、、、)

よろしくお願いします。

[ツリー表示へ]
タイトルRe: Err.Raiseの素朴な疑問
記事No12703
投稿日: 2008/07/04(Fri) 17:46
投稿者matsu
> お世話になります。
>
> 環境はWinXP(SP2)+VB6(SP6)です。
>
> Err.Raiseについて疑問に思う事があり検索などをしても
> 思うような回答にたどりつけないのでご存知の方お教え
> ください。
>
> 【質問】
> ユーザー定義エラーで次のようなコードを実行した時、
>
> Err.Raise vbObjectError + 513
>
> 上位モジュールでエラートラップした際、Err.Number が
> 513 となっていることを期待していたのですが、実際には
> -2147220991 になるのはなぜでしょうか?
>
> トラップした際に、何らかの操作をしないと自分が発生さ
> せたエラー番号512を取得できないのでしょうか?
> (例えば、&HFFFF& でAndをとるなど、、、)
>
> よろしくお願いします。

vbObjectError + 513の結果が-2147220991になります。
単純に、 Err.Raise 513(512?)でいいのと思います。

[ツリー表示へ]
タイトルRe^2: Err.Raiseの素朴な疑問
記事No12705
投稿日: 2008/07/04(Fri) 18:37
投稿者sak
お世話になります。
#失礼しました513です。

matsu 様

確かに希望のエラー番号を設定すればその通りになりますが、
MSDNでは以下のように説明されています。

クラス モジュール内で Number プロパティに
独自のエラー番号を設定するときには、エラ
ー番号を定数 vbObjectError に追加します。
たとえば、エラー番号 513 を発生させるには、
Number プロパティに vbObjectError + 513
を割り当てます。

そこら辺が疑問の種なのですよ。

[ツリー表示へ]
タイトルRe^3: Err.Raiseの素朴な疑問
記事No12708
投稿日: 2008/07/05(Sat) 07:43
投稿者魔界の仮面弁士
> 確かに希望のエラー番号を設定すればその通りになりますが、
> MSDNでは以下のように説明されています。

若い番号は、システムで予約されているエラーコードです。

同じコードを重複して使うことができないわけではありませんが、
未定義の(ユーザー定義の)エラーコード範囲として用意されているのが
vbObjectError すなわち &H80040000 番台のコードであるという事です。

特にクラスモジュール(これは、ActiveX としてプロジェクト外からも
利用される可能性があります)の場合は、この範囲の値を使うことが推奨されます。
これは恐らく、ActiveX 関連のエラーコードが、WinError.h にて 0x80040000 からの
コードとして定義されていることによるものなのでしょう。


詳細は、VB6 付属ヘルプの
「ActiveX コンポーネントのエラー処理」
の項を参照してみてください。

[ツリー表示へ]