如何限制一个函数只能在debug模式下使用,如果是在非debug模式下使用就报错。目的是这样的:我写了一些测试用的函数,我想最终版本不要包括这些函数。但是怕自己没小心在其他不是测试的地方用它。也许不一定用这个debug模式来限制。有什么别的办法来限制我的这些测试函数只能在测试的地方用,不许在其他的地方用呢?
解决方案 »
- adodc控件调用存储过程时参数如何传递
- 使用windowsmediaplayer控件,设置播放文件后,如何清空播放列表?
- 现在什么语言比较流行啊?
- 如保才能取出Tab制表的KeyAscii值?在张等呀,很急谢谢
- 请问如何用代码实现增加一个shape或command.
- 大家来帮帮忙可以吗?我在网上找了三天的资料都找不到怎么解决才来这里请教你们!
- 【问】XP效果的.exe.manifest如何放在资源文件中使用?
- ActiveBar2使用VB自带的打包工具打包后为何不能正常使用?在线等待
- 如何对注册表中主键的重命名?
- 在VB中如何PACK掉DBF表中的记录??
- 问一下treeview控件的用法
- CreateThread创建线程成功,但是
条件编译已选择的 Visual Basic 代码块。
语法
#If expression Then
statements
[#ElseIf expression-n Then
[elseifstatements]]
[#Else
[elsestatements]]
#End If
#If...Then...#Else 指令的语法具有以下几个部分:
部分 描述
expression 必要。包含一个或多个条件编译常数、文字与运算符的任何表达式,其值为 True 或 False。
statements 必要。Visual Basic 程序行或编译指令,如果关联的表达式为 True,则运行它们。
expression-n 可选。由一或多个条件编译常数、文字和运算符组成的任何一个表达式,其值为 True 或 False。
elseifstatements 可选。一个或多个程序行或编译命令,如果 expression-n 为 True,则运行它们。
elsestatements 可选。一个或多个程序行或编译命令,如果以前的expression 或 expression-n 中没有一个为 True,则运行它们。
说明
#If...Then...#Else 指令的作用与 If...Then...Else 语句相同,其差异在于 #If、#Else、#ElseIf,及 #End If 指令没有单独成行的形式,也就是说,在指令所在的那一行,不能有其他代码出现。条件编译通常用来编译不同平台上的同一个程序。也可以用来避免调试程序代码出现在可执行程序中。条件编译时被排除的程序代码在最后的可执行文件中被完全略去,所以不会对程序的大小或功能有任何影响。
无论结果如何,都要计算所有表达式。所以,在表达式中用到的所有常数都必须加以定义— 任何未定义的常数都会被当作 Empty 来计算取值。
注意 Option Compare 语句不会影响 #If 及 #ElseIf 语句中的表达式。条件编译指令中的表达式总是用 Option Compare Text 计算值。
#If...Then...#Else 指令示例
本示例在 #If...Then...#Else构造中引用条件式编译器常数,来决定编译那部分语句。
' 如果 Mac 常数为 true,则编译 #If后面的语句。
#If Mac Then
'. 将 Mac 语句写在此处。
'.
'.
' 否则,如果是 32 位窗口程序,则编译这个语句:
#ElseIf Win32 Then
'. 将 32 位窗口程序语句写在此处。
'.
'.
' 再否则,则编译以下语句:
#Else
'. 将其他作业平台适用的语句写在此处。
'.
'.
#End If
lg:public const bTest as boolean=true '测试开关
if (bText) then
你的测试函数
endif
下面这个函数可以检测是否在VB的IDE下:
Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
'测试是否在VB_IDE环境下
Public Function GetIDEmode() As Boolean
Dim strFileName As String
Dim lngCount As Long
strFileName = String(255, 0)
lngCount = GetModuleFileName(App.hInstance, strFileName, 255)
strFileName = Left(strFileName, lngCount)
If UCase(Right(strFileName, 7)) <> "VB6.EXE" Then
GetIDEmode = False
Else
GetIDEmode = True
End If
End Function
Private Sub Command1_Click()
If Run_InIDE Then
MsgBox "在IDE运行"
Else
MsgBox "没有在IDE运行"
End If
End SubPrivate Function Run_InIDE() As Boolean
Debug.Assert zSetTrue(Run_InIDE)
End FunctionPrivate Function zSetTrue(ByRef bValue As Boolean) As Boolean
zSetTrue = True
bValue = True
End Function
编译时,在条件编译参数中输入:DEBUG_VERSION = 1
生成EXE时将其改为:DEBUG_VERSION = 0这样可以用伪指令:
Private Sub Form_Load()
#If DEBUG_VERSION Then
MsgBox "IDE"
#Else
MsgBox "EXE"
#End If
End Sub
on error goto err1
Debug.print 1/0
InIDE=False
exit Function
err1:
InIDE=TRUE
End Function
比如按我8楼的设置方法,你的函数可以类似如下这样写:public sub InDebug(s as string)
#if DEBUG_VERSION then
msgbox s
#end if
End Sub这样就可以保证只在调试模式下使用这个函数,生成EXE时只要将常量改为:DEBUG_VERSION = 0,也很方便...
'判断是否处于IDE中.
on error goto ErrHanele IsIde = true
debug.print 1/0 '触发错误,编译后这一行不会执行.
IsIde = False
Exit function
ErrHanele:
end function
你的函数开头调用一下IsIDE就可以了:if iside then exit function/sub闪.
debug.assert settrue(bide)
end subfunction SetTrue(byref v as boolean) as boolean
v = true
settrue = true
end function
Public Sub test()
#If DEBUG_VERSION Then
MsgBox "IDE"
Call dd
#Else
MsgBox "EXE"
#End If
'Call dd '在这里call编译就不会通过
End Sub'bas2
#If DEBUG_VERSION Then
Public Sub dd()
#Else
Private Sub dd()
#End If MsgBox "dd"
End Sub
Public Sub test()
#If DEBUG_VERSION Then
MsgBox "IDE"
Call dd
#Else
MsgBox "EXE"
#End If
End Sub#If DEBUG_VERSION Then
Public Sub dd()
MsgBox "dd"
End Sub
#End If
#If DEBUG_VERSION Then
Public Sub m_tvw_NodeClick(ByVal Node As MSComctlLib.Node)
#Else
Private Sub m_tvw_NodeClick(ByVal Node As MSComctlLib.Node)
#End If
Call m_cmm.SendMessage_SelChanged(CndN(Node))
End Sub
因为那个投递消息的问题没解决,我只好把不该公开的成员函数在调试模式下公开了。这也是没有办法的办法啊。
MSDN里边说不会..用断言检验代码
断言是一种方便的方法,它可以测试应该在您的代码中特定点出现的条件。设想一个 Assert 语句如同做一个假设。如果您的假设是True,将忽略该断言;如果您的假设是False,VB 将会引起您的注意。在 Visual Basic 中,断言总是以方法的形式出现:Debug 对象的 Assert 方法。Assert 方法需要一个 Boolean 类型参数,这个参数规定计算的条件。Assert 方法的语法如下:Debug.Assert(boolean expression)Debug.Assert 语句不会出现在编译后的应用程序中,但是,在设计环境中运行时,它将使应用程序进入中断模式,并突出显示包含这条语句的代码行(假定表达式的值为 False)。下例说明了Debug.Assert 语句的用法:Debug.Assert Trim(CustName) = "John Doe"在上例中,如果 CustName 的值不是 John Doe,则应用程序将进入中断模式;否则将正常执行。使用 Debug.Assert 与选定“当值为 True 时中断”选项来设置监视大致相同,只是前者在表达式的值为假时将中断执行。
首先,确保“查看\定位选项卡”是选中的;
然后,在“活动子集”中选“*Visual Basic 文档”;
这样范围就小多了。