0

私は現在、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()

using の全体的な目的は、と を使用して と をインスタンス化することによりScriptControl、ファイルのクラス プロパティPropStringAとで定義された文字列を取得することです。PropStringBClassScriptControl.Eval

これが私の質問Classです:これは(ハック)機能しますが、入力スクリプトに必要なもの、特に定義とPublic Get Property(ies)が実際に含まれていることを確認するためのより良い、より洗練された方法はありますか?ファイルが空白ではなく、実際には VB コードが含まれていないテキスト ファイルなどの場合はどうでしょうか。

おまけ:代わりにCodeReviewでこれを尋ねる必要がありましたか?

4

0 に答える 0