VBS 構造体(CLASS)

VBSではVB、VBAのように構造体を使用できないのです。これがないとかなりキツイ。。 その代わり?クラスを以下のように使用して構造体以上の動作が可能です。


<補足>
コンストラクタとは、オブジェクトが生成された時(Set Sg = New clsSys)に自動で呼び出されます。
デストラクタとは、オブジェクトを破棄する時(Set Sg = Nothing)に自動で呼び出されます。

では、実装の仕方について
'*** 最初にクラス定義 ***
CLASS clsSys

  Private Fso   'オブジェクト:ファイルシステム
  Private Shell 'オブジェクト:SHELL

  'コンストラクタ
  Private Sub Class_Initialize()

    Set Fso    = CreateObject("Scripting.FileSystemObject")
    Set Shell  = CreateObject("Wscript.Shell")

    Wscript.Echo "コンストラクタ起動"

  End Sub

  'デストラクタ
  Private Sub Class_Terminate()

    Set Fso = Nothing
    Set Shell = Nothing

    Wscript.Echo "デストラクタ起動"

  End Sub


  'コマンド実行処理
  Public Function Exec(strcmdline)

    On Error Resume Next

    Wscript.Echo "[cmdline] " & strcmdline

    Set oExec = Shell.Exec ( strcmdline )

    IF Err.Number <> 0 Then
      Exec = Err.Number
      Exit Function
    End If

    Do While (oExec.Status=0)
      WScript.Sleep 100
    Loop

    'リターンコード
    Exec = oExec.ExitCode

    On Error Goto 0

  End Function

END CLASS


'*** ここからが処理 ***
Dim clsSeigyo

'クラス生成(コンストラクタが実行されます)
Set clsSeigyo = New clsSys

Call main()

'クラス初期化(デストラクタが実行されます)
Set clsSeigyo = Nothing

Wscript.Quit(intRet)


'** メイン処理 **
Sub main()

  Dim arrycmd
  Dim i

  arrycmd = array( "Cmd.exe /C Echo OK?","Cmd.exe /C Echo NG?")

  For i = 0 To Ubound(arrycmd)
    ec clsSeigyo.Exec(arrycmd(i))
  Next

End Sub

'** 実行結果 **


コンストラクタ起動
[cmdline] Cmd.exe /C Echo OK?
'[2008/12/06 13:49:07]0
[cmdline] Cmd.exe /C Echo NG?
'[2008/12/06 13:49:07]0
デストラクタ起動

'** 参考に **


クラス内の呼び出し方について