7

多くの変数に明示的に定義された型がない大規模な VB6 プロジェクトがあるため、自動的にデフォルトでVariant型が設定されます。これらすべてを手作業で見つけるのは大変な作業ですが、これを自動化する方法はありますか? VB.Net では、「Option Strict」を使用してバリアントのすべての自動使用を無効にすることができますが、VB6 にはそのオプションがありません。

現在DefByte A-Z、すべてのクラスに追加しました。これにより、デフォルトのタイプが「バリアント」ではなく「バイト」になります。これにより、実行時に 255 より大きい値が割り当てられるとすぐに、多くの未定義変数をキャッチできます。しかし、それでも完全に確実というわけではありません。

すべての未定義変数を検出するより信頼できる方法はありますか?

4

4 に答える 4

5

私は以前、 AivostoのProjectAnalyzerを使用してこのようなものをピックアップしていました。それが何ができるかについてあなたに良い考えを与えるデモ版があります。

于 2012-01-19T13:19:21.657 に答える
4

モジュールを で装飾しますOption Explicit

このフレーズは、作成する各モジュールの先頭に配置する必要があります。これを行うと、宣言されていない変数が検出されたときにコンパイラ エラーが発生します。

Option Explicitただし、次のような型のない変数宣言は妨げられません。

Dim i

変数iはバリアントとして宣言され、Option Explicit定義されていてもコンパイラ エラーはスローされません。

于 2012-01-19T13:33:51.130 に答える
2

すべての未定義変数を検出する「絶対確実な」方法はないと思います。ただし、Option Explicitステートメントでは、ステートメントが表示されるモジュールですべての変数を宣言する必要があるため、コンパイラは、そうでない場合にフラグを立てます。このステートメントを新しいモジュールの先頭に自動的に追加する IDE オプションもあります。

于 2012-01-19T13:15:54.453 に答える
2

プログラマーのテキスト エディター (私は UltraEdit を使用) を使用して、プロジェクトのソース ディレクトリ全体を一括検索します。

Variantあなたはおそらくすでにそれを行っているでしょうが、(明らかに)を検索することから始めてください。

次に、正規表現タイプの検索を使用して、次の行に沿って何かを検索します。

 *Dim [a-zA-Z][a-zA-Z0-9_]*\p

それはDim x、末尾のないシナリオを取得する必要がありますAs DataType

シナリオのタイプ*Dim [a-zA-Z][a-zA-Z0-9_]*,.*を見つけるために使用します。Dim a, b, c As Integer

*Dim .*, [a-zA-Z][a-zA-Z0-9_]*,.*次のようなオッド ボール シナリオに使用します。Dim a As Integer, b, c As Long

PrivateandGlobalの代わりにand を使用して上記の検索を繰り返すと、Dimほぼすべてが得られるはずです。

于 2012-01-19T18:11:19.653 に答える