VB 6で次のCコードのようなことをするにはどうすればよいですか?
#ifdef _DEBUG_
// do things
#else
// do other things
#end if
それはあなたが慣れている他の言語とほとんど同じです。構文は次のようになります。
#If DEBUG = 1 Then
' Do something
#Else
' Do something else
#End If
構文がVB 6の他のフロー制御ステートメントとまったく同じであることを覚えていれば、コンパイル時の条件文がポンド記号(#
)。
秘訣は、実際にはDEBUG
(またはその他)定数を定義することです。これは、デフォルトで定義されている定数がないと確信しているためです。それを行うには2つの標準的な方法があります。
使用 #Const
キーワードを使用して、各ソースファイルの先頭に定数を定義します。この方法で確立した定義は、ソースモジュール全体で有効です。次のようになります。
#Const DEBUG = 1
プロジェクトのプロパティで定数を設定します。これにより、プロジェクト全体で有効な定数が定義されます(おそらく、「デバッグ」モードインジケーターに必要な定数です)。
これを行うには、[プロジェクトのプロパティ]ダイアログボックスの[作成]タブにある[条件付きコンパイル定数]テキストボックスに次のように入力します。
DEBUG = 1
このダイアログで複数の定数を定義するには、それぞれをコロン(:
):
DEBUG = 1 : VERSION2 = 1
notが定義されている定数は、0と見なされることに注意してください。
コーディは条件付きコンパイルについてあなたに話しました。 IDEでデバッグするときに別の動作が必要な場合は、追加したいと思います(たとえば、IDEがエラーをトラップするように独自のエラー処理をオフにする)条件付きコンパイルは必要ありません。このように実行時にIDE)を検出できます。
On Error Resume Next
Debug.Print 1/0
If Err=0 then
'Compiled Binary
Else
'in the IDE
End if
これは、コンパイルされたEXEでDebug.Printが省略されているために機能します。
MarkJと同じ効果を実現するには、エラー処理を使用して、次のコードを使用できます。
Public Function GetRunningInIDE() As Boolean
Dim x As Long
Debug.Assert Not TestIDE(x)
GetRunningInIDE = x = 1
End Function
Private Function TestIDE(x As Long) As Boolean
x = 1
End Function
IDE内から実行している場合、関数を呼び出すための余分なオーバーヘッドが発生します(これは途方もなく小さいです)。コンパイルすると、これは単純な数値比較に評価されます。
これは私の短くて安定したコードです。複雑になるたびに変更する必要がないため、条件付き定数よりも優れていると思います。
Public Function InIDE() As Boolean
On Error Resume Next
Debug.Print 0 / 0
InIDE = Err.Number <> 0
End Function