Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

vbscript

I have 2 vbs files.

A.vbs:

Class test
  public a
  public b
End Class

B.vbs:

Dim objShell
Set objShell = Wscript.CreateObject("WScript.Shell")
objShell.Run "C:\Users\shanmugavel.chinnago\Desktop\Test3.vbs" 

Dim ins
Set ins = new test 'Here throws "Class not defined: test"
ins.a = 10
ins.b = "SCS"

msgbox ins.a
msgbox ins.b

Now I want to achive this like in B.vbs file. But it throws error while creating instance for the class availble in A.vbs. Any help?

like image 626
Shan C Avatar asked Dec 17 '22 00:12

Shan C


2 Answers

.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)

like image 149
Ekkehard.Horner Avatar answered May 26 '23 19:05

Ekkehard.Horner


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
like image 21
peter Avatar answered May 26 '23 18:05

peter