- - PR -
Nothingの判定
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-25 14:59
VB7(VisualStudio2003)でレジストリ内を検索するプログラムを作成しています。
レジストリのキー内に値があればGetValueNames()とGetValue()を使ってデータを取得しています。 取得した後、データがString型で、事前に定義した文字列と一致した場合にメッセージボックスを表示します。 全てのレジストリ内を再帰的に検索して行き、データが文字列と一致するか調査しているのですが、レジストリの中には REG_NONE (長さ0のバイナリ値) と、言うタイプの値もあり、このデータのチェックで下記エラーが発生します。 -------------------------------------------------------- 'System.NullReferenceException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。 追加情報 : オブジェクト変数または With ブロック変数が設定されていません。 -------------------------------------------------------- ソースコードは以下のように記述しています。(抜粋) -------------------------------------------------------- Dim value_names As String() value_names = reg_key.GetValueNames() Dim value_name As String For Each value_name In value_names Dim value = reg_key.GetValue(value_name) If value.GetType().Name = "String" Then <--ココでエラーとなる If value.EndsWith(target_word) Then ret = value & vbCrLf & "データ発見" MessageBox.Show(ret) ret = True Exit For ・・・ ------------------------------------------------------- REG_NONE(長さ0のバイナリ値)をチェックするにはどうすればよいでしょうか? エラー直前に if value <> nothing then とか If value.length <> 0 Then 等とやっても駄目でした。 チェックに方法を御存知の方、アドバイスをお願いします。 | ||||
|
投稿日時: 2007-03-25 15:17
Is 演算子 (Visual Basic) (microsoft.com) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-03-25 15:24
これでは判定できません。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28458&forum=7 いくつか記述法はありますが、VS2003なら If Not value Is Nothing Then あたりでよいと思います。 ただし、そもそも value が String 型かどうかを判定するのに、 GetType().Name で見るのはまずいでしょう。 名前空間が異なれば、同じ名前のクラスは定義できますから。 TypeOf...Is 式を使用してください。 TypeOf 演算子 (Visual Basic) | ||||
|
投稿日時: 2007-03-25 16:07
じゃんぬねっとさん、KIさんアドバイスありがとうございます。
>Is 演算子 (Visual Basic) (microsoft.com) >If Not value Is Nothing Then そうですね。Is演算子があるのですよね・・・ 思いつきませんでした・・・ アドバイスありがとうございます。 早速、使おうと思います。 以上、ありがとうございました。 |
1