2012-01-19 6 views
7

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

今、私はすべてのクラスにDefByte A-Zを追加しました。これにより、 'Variant'の代わりにデフォルトのタイプ 'Byte'が作成されます。これにより、実行時に255より大きい値が割り当てられるとすぐに、未定義の変数が多数キャッチされます。しかし、それでもまだ完全には保証されていません。

未定義の変数をすべて検出する信頼性の高い方法はありますか?

+0

"Variant"という単語をソリューション全体で簡単に検索することはできませんか? – pikzen

+1

@pikzen:VB6では、型を指定しないとVariantを取得できません。 – MartW

+1

また、 "Dim x、y、z AS Integer"のような行がある場合、zだけがIntegerになります。 xとyはVariantになります。この動作はVBで変更されました。NET、幸いにも。 – MartW

答えて

2

定義されていないすべての変数を検出する "絶対的な"方法はないと思います。しかし、Option Explicitステートメントでは、ステートメントが出現するモジュールですべての変数を宣言する必要があります。そのため、コンパイラは、そうでない場合にはすべてのインスタンスにフラグを付けます。このステートメントを新しいモジュールの開始に自動的に追加するIDEオプションもあります。

+0

コードは既に使用されていますOption Explicit、ありがとうとにかく! – Muis

+0

コードでOption Explicitを使用していた場合、なぜこの質問をしていますか? –

+0

@ MarkBertenshaw - 'Option Explicit'は宣言されていない変数をチェックします。それはOPが必要とするバリアントであると宣言された変数を確認しません –

5

私はAivosto's Project Analyzerを使用してこのようなものを拾いました。デモ版があり、それがあなたに何ができるのかが分かります。

+0

合意しました。ソフトウェアは高価ではなく、時間の節約と問題の防止に非常に迅速に対応します。 –

4

Option Explicitでモジュールを飾る。

このフレーズは、作成する各モジュールの上部に表示されます。これが行われると、宣言されていない変数に遭遇したときにコンパイラエラーが発生します。

Option Explicitは、しかしながら、変形例として宣言されるよう

Dim i 

変数iとしてタイプレス変数宣言を、防ぐことはできません、とNOコンパイラエラーも定義Option Explicitとスローされません。

+0

コードは既に使用されていますOption Explicit、ありがとうとにかく! – Muis

2

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

Variant(明らかに)を検索することから始めますが、おそらく既にそれを行っています。末尾As DataTypeなしDim xシナリオを取得する必要があります

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

次の線に沿って何かのための正規表現型検索を使用します。

*Dim [a-zA-Z][a-zA-Z0-9_]*,.*を使用すると、Dim a, b, c As Integerタイプのシナリオが見つかります。 Dim a As Integer, b, c As Long

のような奇妙なボールシナリオの

使用*Dim .*, [a-zA-Z][a-zA-Z0-9_]*,.*PrivateGlobalの代わりDimと上記seachesを繰り返し、それはちょうど約すべてを取得する必要があります。

+1

VBでは「Dim」が最初に必要なので、ReDimも含めてください。配列、関数のパラメータ、戻り値などでは機能しません。いい努力をしているうちに、いくつかの抜け穴があります; – Muis

+0

私はRedimで配列を使っただけです。私はパラメータの問題を考えましたが、正直言って私は正規表現で十分ではありません。私は私より野心的な誰かにそれを任せます:) – tcarvin

+0

PublicとPrivateはフィールドを宣言するためにも使用できませんか?それらの正規表現も必要です。 – MarkJ

関連する問題