Как проверить, определяет ли 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 вместо этого?

0 ответов

Другие вопросы по тегам