我正在对一个用Visual Basic 6编写的旧应用程序进行一些维护工作,由于各种原因,我们有一部分代码只需要运行,如果我们通过VB6 IDE(即附加了调试器)。
在VB.NET中,您可以使用System.Diagnostics.Debugger.IsAttached()
属性来执行此操作,但我在Google上的VB6中找不到类似内容。
有没有简单的方法来计算这些信息?
答案 0 :(得分:11)
以下是我们正在使用的没有任何副作用的内容
Public Property Get InIde() As Boolean
Debug.Assert pvSetTrue(InIde)
End Property
Private Function pvSetTrue(bValue As Boolean) As Boolean
bValue = True
pvSetTrue = True
End Function
答案 1 :(得分:7)
这是我一直在使用的功能:
Private Function RunningInIde() As Boolean
On Error GoTo ErrHandler
Debug.Print 1 / 0
ErrHandler:
RunningInIde = (Err.Number <> 0)
End Function ' RunningInIde
答案 2 :(得分:2)
我写了这样的东西一段时间后找不到它,再次需要它。所以我再次写了它,我认为我做对了:
Public Function IsRunningInIde() As Boolean
Static bFlag As Boolean
bFlag = Not bFlag
If bFlag Then Debug.Assert IsRunningInIde()
IsRunningInIde = Not bFlag
bFlag = False
End Function
没有错误。
不重置错误。
只需一个功能。
第1行:“bFlag”的“静态”声明导致bFlag的值粘在多次调用“IsRunningInIde”上。我们想要这个,因为我自己调用了这个函数,并且我不想使用用户不需要的输入参数来丢弃函数。
第3行:未在IDE中运行时不调用“Debug.Assert”。因此,只有在IDE中,“IsrunningInIde”才会被递归调用。
第2行:如果不在递归调用中,则bFlag开始为false,并设置为true。如果在递归调用中(仅在IDE中运行时发生),它将从true开始,并被设置回false。
第3行:只有通过检查bFlag是否为真,才能通过递归方式调用“IsRunningInIde”。
第4行:如果在递归调用中,总是返回True,这并不重要,但不会导致Assert失败。如果不在递归调用中,则返回“Not bFlag”,如果递归调用IsRunningInIde,则bFlag现在为“False”,如果未递归调用则bFlag为“True”。所以基本上,如果bFlag在IDE中运行,则返回“True”。
第5行:清除bFlag,使其在下次调用此函数时始终为“False”。
很难解释,在两种情况下,最好在脑海中逐步完成。
如果您想要更简单地理解代码,请不要使用它。
如果此代码存在问题,我道歉并告诉我,以便我可以解决此问题。
答案 3 :(得分:1)
这是我的功能,类似于Josh的功能,但更容易阅读(见内部评论)。
我用了很长时间才忘记借来的地方......
Public Function InDesign() As Boolean
' Returns TRUE if in VB6 IDE
Static CallCount As Integer
Static Res As Boolean
CallCount = CallCount + 1
Select Case CallCount
Case 1 ' Called for the 1st time
Debug.Assert InDesign()
Case 2 ' Called for the 2nd time: that means Debug.Assert
' has been executed, so we're in the IDE
Res = True
End Select
' When Debug.Assert has been called, the function returns True
' in order to prevent the code execution from breaking
InDesign = Res
' Reset for further calls
CallCount = 0
End Function
答案 4 :(得分:0)
Public Function InIDE() As Boolean
On Error GoTo ErrHandler
Debug.Print 1 \ 0 'If compiled, this line will not be present, so we immediately get into the next line without any speed loss
InIDE = False
Exit Function
ErrHandler:
InIDE = True 'We'll get here if we're in the IDE because the IDE will try to output "Debug.Print 1 \ 0" (which of course raises an error).
End Function
答案 5 :(得分:0)
If InIDE() Then
'- Yes
End If
用法:
import numpy as np
a = np.array([[ 1, 1],[ 1, 1],[ 1, 1],
[ 2, 2],
[ 3, 3], [ 3, 3], [ 3, 3], [ 3, 3],
[ 4, 4], [ 4, 4]])
n = np.unique(a[:,0])
print(np.array([ [i, np.mean(a[a[:,0]==i,1])] for i in n]))