Как проверить, определяет ли Script определенный класс или свойство с помощью MSScriptControl?
В настоящее время я защищаю от идиота устаревшую программу VB6, которая использует MSScriptControl
, Он принимает имя файла в качестве ввода, а затем получает некоторые строки, определенные в Property
из Class
определено в указанном файле.
Вот текущий код:
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
Вышеуказанное загружается в sScriptCode
переменная через FileSystemObject.OpenTextFile()
,
Вся цель использования ScriptControl
чтобы получить строки, определенные в свойствах класса файла PropStringA
а также PropStringB
, создавая экземпляр Class
и используя ScriptControl.Eval
,
Вот мой вопрос: это (взлом) работает, но есть ли лучший, более изощренный способ проверить, что входной скрипт действительно содержит то, что мне нужно, в частности Class
определение и Public Get Property
(ы)? Что делать, если файл не пустой, но на самом деле не содержит VB-код, скажем, текстовый файл?
Бонус: я должен был спросить об этом на CodeReview вместо этого?