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