Don’t blame VBScript
VBScript is a very popular automation language. Microsoft VBScript Engine, which is available for free, is one of the reasons, another - on the surface VBScript is extremely simple. But I admit that switching to VBScript from C was hard at times. It required unlearning approach.
And yet VBScript is powerful enough so that a seasoned programmer used to Object-Oriented paradigm can use the same approach with a little bit of creativity.
Class Constructor
Each VBScript class has a constructor which is automatically called when a new object instance is created.
Private Sub Class_Initialize() ' put your custom initialization code End Sub
Class Destructor
Each VBScript class has also a destructor which is automatically called when life span of the object comes to an end.
Private Sub Class_Terminate() ' put your custom initialization code End Sub
Virtual Properties
Special methods Property Get, Property Let, and Property Set allow using object properties that do not actually exist.
Class Point2D '' Properties Private p_X Private p_Y '---------------------- '' Methods 'Constructor - called automatically Private Sub Class_Initialize() X = 0 Y = 0 End Sub '---------------------- 'Destructor - called automatically Private Sub Class_Terminate() End Sub '---------------------- 'A pair of methods to access private property X Property Get X X = p_X End Property Property Let X(ByVal in_X) p_X = in_X End Property '---------------------- 'A pair of methods to access private property Y Property Get Y Y = p_Y End Property Property Let Y(ByVal in_Y) p_Y = in_Y End Property '---------------------- 'A pair of methods to access virtual properties: 'Point's Polar coordinates Property Get Polar_R Polar_R = Sqr(p_X*p_X + p_Y*p_Y) End Property Property Get Polar_Phi Polar_Phi = Atn(p_Y/p_X) End Property '---------------------- End Class
Inheritance through Delegation
VBScript does not allow declaring a class through derivation. However, a programmer can declare a property (or multiple properties) and initialize it (them) with reference(s) of ancestor object(s). That will give the desired access to the properties and methods of ancestor objects.
Class ScreenPoint '' Properties 'Ancestor Point2D Private P2D 'Point color Private Color '---------------------- '' Methods 'Constructor - called automatically Private Sub Class_Initialize() Set P2D = new Point2D End Sub '---------------------- 'Destructor - called automatically Private Sub Class_Terminate() Set P2D = Nothing End Sub '---------------------- 'A pair of methods to access private property X Property Get X X = P2D.X End Property Property Let X(ByVal in_X) P2D.X = in_X End Property '---------------------- 'A pair of methods to access private property Y Property Get Y Y = P2D.Y End Property Property Let Y(ByVal in_Y) P2D.Y = in_Y End Property '---------------------- End Class
Dynamic Code and Callbacks
To demonstrate this feature, I first prompt you to read about Eval function and ExecuteGlobal statement in VBScript.
Public Function CTZ() sGlobalValue = "ExecuteGlobal successful" End Function Public sGlobalValue Public Function TestExecuteGlobal() Dim sCallName, sLocalValue Dim intRC, boolRC sGlobalValue = "Testing ExecuteGlobal" sCallName = "CTZ()" boolRC = True On Error Resume Next ExecuteGlobal sCallName intRC = Err.Number On Error GoTo 0 If intRC <> 0 Then boolRC = False If Not boolRC Then sGlobalValue = "ExecuteGlobal failed" End If MessageBox(sGlobalValue) End Function
Thus, you can add functions and any definitions (including class definitions) dynamically, during run-time - which allows referring undefined methods and objects!
There are also other magic tricks, as overloading and access to external class libraries. Hopefully this post has been a useful introduction to ignite your interest to automation tricks with VBScript.

November 1st, 2010 - 15:52
It reminds me of Rational Robot