Vb6 如何使用MSScript控件检查脚本是否定义了特定的类或属性?
我目前正在开发一个使用Vb6 如何使用MSScript控件检查脚本是否定义了特定的类或属性?,vb6,msscriptcontrol,Vb6,Msscriptcontrol,我目前正在开发一个使用MSScriptControl的旧式VB6程序。它以文件名作为输入,然后获取在所述文件中定义的类的属性中定义的一些字符串 以下是当前代码: Dim oScript As New ScriptControl With oScript .Language = "VBSCRIPT" .Reset .UseSafeSubset = False .Timeout = -1 sScriptCode = "ScriptLoadedFromSome
MSScriptControl
的旧式VB6程序。它以文件名作为输入,然后获取在所述文件中定义的类的属性中定义的一些字符串
以下是当前代码:
Dim oScript As New ScriptControl
With oScript
.Language = "VBSCRIPT"
.Reset
.UseSafeSubset = False
.Timeout = -1
sScriptCode = "ScriptLoadedFromSomeFileDefinedSomewhereElse" 'This variable contains the entire length of the script file
'This Len() should guard against Test:FileIsBlank
If Len(sScriptCode) = 0 Then GoTo DoTheRest
'This InStr() should guard against Test:FileDoesNotContainClassDef
If InStr(1, sScriptCode, "Class myClassName", vbTextCompare) = 0 Then GoTo DoTheRest
.AddCode sScriptCode
.AddCode "Dim myClassName"
.AddCode "Set myClassObject = New myClassName"
'These InStr()s should guard against Test:FileDoesNotContainExpectedSubs
If InStr(1, sScriptCode, "Property Get PropStringA", vbTextCompare) = 0 Then GoTo DoTheRest
sPropStringA = .Eval("myClassObject.PropStringA")
If InStr(1, sScriptCode, "Property Get PropStringB", vbTextCompare) = 0 Then GoTo DoTheRest
sPropStringB = .Eval("myClassObject.PropStringB")
'This should guard against everything else. That is, Test:FileContainsInvalidVBCode
If Err Then GoTo DoTheRest
End With
DoTheRest:
'Rest of Code
以下是输入脚本文件的相关部分:
Class myClassName
Public Property Get PropStringA()
PropStringA = _
"StringA"
End Property
Public Property Get PropStringB()
PropStringB = _
"StringB,StringC,StringD,StringE"
End Property
上述内容通过FileSystemObject.OpenTextFile()
加载到sScriptCode
变量中
使用ScriptControl
的全部目的是通过实例化Class
并使用ScriptControl.Eval
来获取文件的类属性PropStringA
和PropStringB
中定义的字符串
这是我的问题:这(hack)是有效的,但是有没有更好、更精确的方法让我检查输入脚本是否确实包含我需要的内容,特别是类
定义和公共获取属性
?如果文件不是空的,但实际上不包含VB代码,比如文本文件,该怎么办
奖金:我应该把这个问题重新问一遍吗?我投票决定把这个问题作为离题题来结束,因为它似乎更适合codereview.stackexchange.com。我应该在那里提出一个新问题,还是将这个问题重新问一遍?