Surprisingly, it is possible to write JScript or VBcript programs and package them into Windows Scripting Components which can be registered as COM components. Here are two examples, one JScript and one VBScript.
Example JScript Component
<?xml version="1.0"?>
<package>
<component id="ExcelDevelopmentPlatform.JScriptComponent1">
<registration
description="Example JScript component"
progid="ExcelDevelopmentPlatform.JScriptComponent1"
version="1.00"
classid="{63A7A78A-933C-4BD2-844A-5D78CFC5FB92}"
remotable="True">
</registration>
<public>
<method name="Greet">
<PARAMETER name="s"/>
</method>
<method name="Sum">
<PARAMETER name="a"/>
<PARAMETER name="b"/>
</method>
</public>
<script language="JScript">
<![CDATA[
function Greet(s) {
return ("From JScript Component, hello " + s);
}
function Sum(a,b) {
return (a+b);
}
]]>
</script>
</component>
</package>
Example VBScript Component
<?xml version="1.0"?>
<package>
<component id="ExcelDevelopmentPlatform.VBScriptComponent2">
<registration
description="Example vbScript component"
progid="ExcelDevelopmentPlatform.VBScriptComponent2"
version="1.00"
classid="{63A7A78A-933C-4BD2-844A-5D78CFC5FB93}"
remotable="True">
<script language="VBScript">
<![CDATA[
'* not strictly necessary but nice to see one can customize the messages
'* received when registering with regsvr32.exe
sMyBlog = "See my blog http:\exceldevelopmentplatform.blogspot.com"
'******************************************************************************
Function Register
Msgbox "Windows Script Component registered." & vbNewLine & sMyBlog
End Function
'******************************************************************************
Function Unregister
Msgbox "Windows Script Component unregistered." & vbNewLine & sMyBlog
End Function
'******************************************************************************
]]>
</script>
</registration>
<public>
<method name="Greet">
<PARAMETER name="s"/>
</method>
<method name="Sum">
<PARAMETER name="a"/>
<PARAMETER name="b"/>
</method>
</public>
<script language="VBScript">
<![CDATA[
function Greet(s)
Greet = ("From VBScript Component, hello " + s)
end function
function Sum(a,b)
Sum = (a+b)
end function
]]>
</script>
</component>
</package>
Registering the components on the command line
N:JScriptDev>regsvr32 jScriptComponent1.wsc
N:JScriptDev>regsvr32 vbScriptComponent2.wsc
VBA code to create and call the components
Sub TestJScriptComponent1()
Dim obj As Object
Set obj = VBA.CreateObject("ExcelDevelopmentPlatform.JScriptComponent1")
Debug.Assert TypeName(obj) = "ExcelDevelopmentPlatform.JScriptComponent1"
Debug.Print obj.Greet("Simon")
Debug.Print obj.Sum(3, 4)
End Sub
Sub TestVBScriptComponent2()
Dim obj As Object
Set obj = VBA.CreateObject("ExcelDevelopmentPlatform.VBScriptComponent2")
Debug.Assert TypeName(obj) = "ExcelDevelopmentPlatform.VBScriptComponent2"
Debug.Print obj.Greet("Simon")
Debug.Print obj.Sum(3, 4)
End Sub
Links
Some useful links given that a lot of the documentation has fallen into disuse.
- MSDN - Creating a Script Component
- Google - wsc windows script component
- Microsoft Technet - Scripting Guide
- MSDN - Windows Script Components - They Get Around
- MSDN - Scripting Clinic
- MSDN - WMI Scripting Primer - Part 3
- MSDN - Scripting Events
- MSDN - Windows Script Host 5.6
- Microsoft Technet - Doctor Scripto's Script Shop_ Windows Script Components Have a COM-ing Effect
- Google Books - Windows Script Host - Tim Hill - Do not place Wscript.Echo statements in a component
- MSDN - WMI Scripting Object Model Diagram
No comments:
Post a Comment