VBを勉強中です。
段階としては書籍やサイトの見本プログラムを
いくつか真似て作っているところです。
VB6で作られたプログラムのバージョンアップを
行う作業で、VB6→VS2005アップグレード完了後、
ビルドは完了するものの以下の警告が発生します。
変数 'int_d_sh' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。
「int_d_shが宣言された後、If int_d_sh = "PSUP" Thenまでの間で
If int_d_shに値が入っていないのが原因なのでしょうか?」
「又、それが原因かどうかはわからないのですが
デバッグ中に下記の例外エラーメッセージが発生し
デバッグが完了しませんでした。」
[InvalidOperationExceptionはハンドルされませんでした。]
フォームの作成中にエラーが発生しました。詳細については、Exception.InnerException を参照してください。エラー: System.Security.Permissions.SecurityPermission
「詳細を表示したのですが、どこを参照すれば良いのか
わかりませんでした。
どうすれば解決するのでしょうか?
以下は例外エラーが示したコード部分です。
よろしくお願いします。」
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>Partial Class frm○○(プロジェクト名)
#Region "Windows フォーム デザイナによって生成されたコード "
<System.Diagnostics.DebuggerNonUserCode()> Public Sub New()
MyBase.New()
'この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
End Sub
No.3ベストアンサー
- 回答日時:
「変数 'int_d_sh' は、値が割り当てられる前に使用されています。
Null 参照の例外が実行時に発生する可能性があります。」VBしか使ったことが無ければ判らないかもしれませんが、C/C++ではおなじみの警告文です。
VB6までは変数を宣言すると自動的に初期化される仕様でした。(この仕様のために宣言時に初期値の設定ができなかった)
だから変数に値を代入せずにいきなり使用してもエラーにはなりませんでした。
しかし、VB.NETになってからは変数の宣言時に初期化しなくなりました。(その代わりに初期値を設定できる)
そのために、変数を宣言しただけでは変数にはゴミが入っています。
ゴミの状態によっては、その変数のデータ型では許可されないようなデータ(ビットパターン)になる可能性があります。
そんな状態でその変数を参照するとエラー(Null参照は一例)になったりします。(しかもエラーの原因が判らないことがある)
そういうエラー発生を防ぐために上記の警告文がでてきます。
対策としては、宣言時に初期値を入れたり、参照前に値の代入を行います。
No.4
- 回答日時:
>「int_d_shが宣言された後、If int_d_sh = "PSUP" Thenまでの間で
>If int_d_shに値が入っていないのが原因なのでしょうか?」
そうです。
ソースコード上で見えないだけで、実際には使用される前に確実に値が入るのが
分かっている場合は、警告が出ても致命的な問題ではないです。
ですが、そのまま警告を残しておくのも あまり良くないので、既に出てきていますが
変数を特定の値で初期化してしまいましょう。
Dim xxx As xxx = xxxxx
みたいな書き方です。この書き方は、VB6ではConst(定数)の定義でしか
出来ませんでしたが、VB.NETでは変数の初期化にも使えます。Object参照も
変数定義の時点で出来ます。
.NETでは、なるべく変数は初期化するクセをつけた方がいいかもしれませんね。
>[InvalidOperationExceptionはハンドルされませんでした。]
こちらについては、はっきりとは分からないのですが、
Designer.vb内の情報でエラーになっていますので、恐らく.NETへのコンバートが
うまく出来ないコントロールを使っているとか、VB6にも.NETにも存在するコントロールだけど
コントロールのプロパティとかメソッドとかに違いがあって、うまくコンバートできなかった
のかなぁ、という気がします。
可能であれば、VB6で怪しいと思う(?)コントロールを削除してみてから、
2005にアップグレードしてみれば、エラーが無くなるかもしれません。
(InitializeComponentの中のような気がするけど、中のどこで止まったかが分かれば
判断しやすいんですけどね…)
変数 'int_d_sh' についてはエラー解消されました。
ありがとうございます。
>[InvalidOperationExceptionはハンドルされませんでした。]
こちらについては勉強不足なのですね。。。
みなさんのアドバイスがよく理解できません。
VB6のソフトは手元にないので、コントロールの削除?
(コンポーネントトレイに貼りつくアレのことでしょうか)ができません。。。
No.2
- 回答日時:
「変数 'int_d_sh' は、値が割り当てられる前に使用されています。
Null 参照の例外が実行時に発生する可能性があります。」VB.NET 2005 では コンパイラオプションで 変数の割り当ては
明示的に使用する前に宣言しないとエラーになると思います。
IFなどで条件で宣言部分を行っていませんか?
もしくは勘違い ローカルとPUBLIC変数の混同など・・・
動的に意図的に使用する場合はこのオプションをはずせばよかったとおもいます。
それと、画面のデザインはVB.NET では コードで表示されれます。
オブジェクト定義やプロパティなど・・・
ですからエラー箇所のデザイン部分の定義をコメントアウトしてコンパイルが通るかどうかといった試行錯誤しながら判断してみてはいかがでしょうか? 原因がわかるかもしれません。
VB6でのコンバートは経験がないので参考意見ですがよろしくです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- C言語・C++・C# C言語 3 2022/10/04 15:07
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
実行時エラー3001「引数が間違...
-
VBSで変数の宣言はできないので...
-
VBS実行時エラー オブジェクト...
-
VB6+SQL サーバー 2000 で 実行...
-
IEのダウンロード通知バーのVBA...
-
なぜこんな初歩的なVBAのIf文で...
-
EXCEL VBAマクロ中断でデバッグ...
-
【Excel VBA】マクロをボタンに...
-
ADODB.Streamを使用してUTF-8を...
-
ExcelVBAで、ユーザー定義型は...
-
VBAがブレークモードになっ...
-
ExcelVBA Range クラスの Page...
-
VBAでのMATCH関数
-
OLEDB.NETで接続できない
-
ExcelVBAでのエラー回避
-
Excelで下記のようにマクロを作...
-
EXCEL/VBAで、自分のPCだけエラ...
-
マクロについて教えてください...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAでのエラー
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
実行時エラー3001「引数が間違...
-
VBS実行時エラー オブジェクト...
-
VBAがブレークモードになっ...
-
OLEDB.NETで接続できない
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
VBSで変数の宣言はできないので...
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー -'-2147417848
-
AccessVBAでExcelを起動し、罫...
-
VB6+SQL サーバー 2000 で 実行...
-
Outlook.ApplicationをCreateOb...
-
Application.ActiveInspectorで...
おすすめ情報