私は現在、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
とで定義された文字列を取得することです。PropStringB
Class
ScriptControl.Eval
これが私の質問Class
です:これは(ハック)機能しますが、入力スクリプトに必要なもの、特に定義とPublic Get Property
(ies)が実際に含まれていることを確認するためのより良い、より洗練された方法はありますか?ファイルが空白ではなく、実際には VB コードが含まれていないテキスト ファイルなどの場合はどうでしょうか。
おまけ:代わりにCodeReviewでこれを尋ねる必要がありましたか?