如何在VB 6中执行类似于以下C代码的操作?
#ifdef _DEBUG_
// do things
#else
// do other things
#end if
答案 0 :(得分:35)
它与您习惯的其他语言几乎相同。语法如下所示:
#If DEBUG = 1 Then
' Do something
#Else
' Do something else
#End If
如果您只记得语法与VB 6中的其他流控制语句完全相同,则很容易记住,除了编译时条件以井号(#
)开头。 / p>
诀窍实际上是定义DEBUG
(或其他)常量,因为我很确定默认情况下没有定义。有两种标准方法:
使用#Const
关键字在每个源文件的顶部定义常量。以这种方式建立的定义在整个源模块中都有效。它看起来像是:
#Const DEBUG = 1
在项目属性中设置常量。这将定义一个在整个项目中有效的常量(可能是您想要的“调试”模式指示符)。
要执行此操作,请在“项目属性”对话框的“生成”选项卡上的“条件编译常量”文本框中输入以下内容:
DEBUG = 1
您可以在此对话框中定义多个常量,方法是用冒号(:
)分隔每个常量:
DEBUG = 1 : VERSION2 = 1
请记住,任何未定义的常量都假定为0。
答案 1 :(得分:10)
Cody告诉过你关于条件编译的事。我想补充一点,如果在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。
答案 2 :(得分:7)
要获得与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中运行时,会有一个额外的调用函数的开销(这是非常小的)。编译时,这将评估为简单的数字比较。
答案 3 :(得分:2)
这是我简短而稳定的代码。我认为它比条件常量更好,因为你不需要在每个复杂时间都改变它。
Public Function InIDE() As Boolean
On Error Resume Next
Debug.Print 0 / 0
InIDE = Err.Number <> 0
End Function