Create instance for a class(resides in B.vbs) from another .VBS file

前端 未结 4 756
迷失自我
迷失自我 2020-12-11 23:04

I have 2 vbs files.

A.vbs:

Class test
  public a
  public b
End Class

B.vbs:

Dim objShell         


        
相关标签:
4条回答
  • 2020-12-11 23:22

    You can convert B.vbs into a Windows Script File which will allow you to include A.vbs.

    0 讨论(0)
  • 2020-12-11 23:25

    Your b script doesn't have contact with youyr a script, you need to include the code like so, then you can use code from a like it were present in b

    call Include("a.vbs")
    
    Sub Include (Scriptnaam)
      Dim oFile
      Set oFile = oFso.OpenTextFile(Scriptnaam)
      ExecuteGlobal oFile.ReadAll()
      oFile.Close
    End Sub
    
    0 讨论(0)
  • 2020-12-11 23:26

    .Running a .vbs won't make the code usable in another one. A simple but extensible strategy is to use .ExecuteGlobal on the 'libraries'. Given

    Lib.vbs:

    ' Lib.vbs - simple VBScript library/module
    ' use
    '  ExecuteGlobal goFS.OpenTextFile(<PathTo\Lib.vbs>).ReadAll()
    ' to 'include' Lib.vbs in you main script
    
    Class ToBeAShamedOf
      Public a
      Public b
    End Class ' ToBeAShamedOf
    

    and main.vbs:

    ' main.vbs - demo use of library/module Lib.vbs
    
    ' Globals
    Dim gsLibDir : gsLibDir = ".\"
    Dim goFS     : Set goFS = CreateObject("Scripting.FileSystemObject")
    
    ' LibraryInclude
    ExecuteGlobal goFS.OpenTextFile(goFS.BuildPath(gsLibDir, "Lib.vbs")).ReadAll()
    
    WScript.Quit main()
    
    Function main()
      Dim o : Set o = New ToBeAShamedOf
      o.a = 4711
      o.b = "whatever"
      WScript.Echo o.a, o.b
      main = 1 ' can't call this a success
    End Function ' main
    

    you'll get:

    cscript main.vbs
    4711 whatever
    

    (cf. this answer for a seed of a useful class)

    0 讨论(0)
  • 2020-12-11 23:27

    This is the code that we use to do this.

    Sub Include(sInstFile)
        Dim f, s, oFSO
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        On Error Resume Next
        If oFSO.FileExists(sInstFile) Then
            Set f = oFSO.OpenTextFile(sInstFile)
            s = f.ReadAll
            f.Close
            ExecuteGlobal s
        End If
        On Error Goto 0
        Set f = Nothing
        Set oFSO = Nothing
    End Sub
    
    Include("c:\files\SSDConnection.vbs")
    Include("c:\files\SSDTable.vbs")
    

    Works flawless for our team

    0 讨论(0)
提交回复
热议问题