注冊 登錄
Office中國論壇/Access中國論壇 返回首頁

zhuyiwen的個人空間 http://ctxi.cn/?625 [收藏] [復制] [分享] [RSS]

日志

Windows 腳本組件技術(shù)(轉(zhuǎn))

熱度 1已有 2728 次閱讀2016-5-4 09:36 |個人分類:VBA| 腳本, 組件

Windows 腳本組件技術(shù)為開發(fā)者提供了用腳本語言創(chuàng)建功能強大、可復用的 COM 組件的簡便方式。開發(fā)者可以使用任何支持 Microsoft ActiveX Scripting 接口的腳本語言來創(chuàng)建腳本組件,支持這些接口的腳本語言有 JScript、VBScript 和 PERLScript 等。使用腳本組件可以為多種任務創(chuàng)建 COM 組件,如訪問和操作數(shù)據(jù)庫數(shù)據(jù)、給應用程序添加事務處理以及使用 DHTML Behavior 給 Web 頁添加交互效果等。

1、腳本組件技術(shù)

1.1 腳本組件的運行
    腳本組件的運行涉及三個方面內(nèi)容:腳本組件運行時程序(Scrobj.dll),接口處理程序和腳本組件文件(擴展名為.wsc)。
   
    (1) 腳本組件運行時程序(Scrobj.dll)用來幫助將 COM 請求發(fā)送到腳本組件。Scrobj.dll是主機應用程序的入口點并作為腳本組件的 inproc 服務器執(zhí)行。
    (2) 接口處理程序是已經(jīng)編譯好的實現(xiàn)特定 COM 接口的組件。復雜的 COM 組件可以包括多個接口的實現(xiàn)。最常使用的接口處理程序包括 COM Automation 接口處理程序、ASP 接口處理程序以及用于 DHTML Behavior 的處理程序。這些處理程序都已內(nèi)置于腳本組件運行時程序中,其它處理程序可作為外接組件或嵌在相關的應用程序中。
    其中,Automation 組件是最常用的 COM 組件類型,該組件擁有屬性和方法,其它應用程序可以調(diào)用這些屬性和方法。實現(xiàn)這些功能所必需的低層次 COM 接口都內(nèi)置于 Automation 接口處理程序中。在腳本組件文件中只需定義需要說明的屬性、方法和事件,便可確保主應用程序?qū)?Automation 處理程序的正確調(diào)用。
    (3) 腳本組件文件屬于可擴展的標記語言(eXtensible Marked Language,簡稱 XML)文件。用戶可遵循 XML 規(guī)則來開發(fā)只包含簡單函數(shù)功能的 COM,也可開發(fā)包括外接組件的復雜 COM。
   
1.2 腳本組件文件的框架
    Windows 腳本組件文件采用 XML 來編寫。XML 元素定義了腳本及其操作。
    下面的示例演示了一個腳本組件文件的框架。
[code]<?XML version="1.0"?>
<package>
 <?component error="true" debug="true"?>
 <component id="MyComponent">
  <registration>
  </registration>
  <reference object="progID" />
  <public>
  </public>
  <implements type=COMhandlerName id=internalName>
  </implements>
  <script language="VBScript">
  </script>
 </component>
</package>[/code]
    其中幾個主要腳本元素意義如下:
    (1) <component> 元素包含的是一個完整的腳本組件定義。在同一個 .wsc 文件中可出現(xiàn)多個 <component> 元素,但這些 <component> 元素應包含在一個 <package> 元素內(nèi)。
    (2) <registration> 元素包括用來將腳本組件注冊為 COM 組件的信息。如果宿主應用程序(如IE)在創(chuàng)建該腳本組件的實例時沒有直接用到 Windows 注冊表,則該元素可省略。
    (3) <script> 元素包含用來實現(xiàn)腳本組件邏輯的腳本,這取決于所創(chuàng)建的 COM 組件類型。如果開發(fā)者創(chuàng)建的是 COM Automation 組件,則可以在 <public> 元素中聲明屬性、方法和事件,然后用一個或多個 <script> 元素編寫腳本來定義這些內(nèi)容。
    (4) <reference> 元素引用在腳本中需要使用的類型庫。
   
1.3 腳本組件的使用
    在 Windows 資源管理器中,用鼠標右鍵單擊腳本組件(.wsc)文件,然后選擇“注冊”,或者使用 regsvr32.exe 注冊程序進行注冊:
    [code]regsvr32 path\component_name.wsc[/code]
    在創(chuàng)建和注冊 Windows 腳本組件后,就可以像使用任何 COM 組件一樣,通過宿主應用程序調(diào)用來使用該腳本組件。宿主應用程序可以是 VB、C++、IE 等應用程序。
    根據(jù)宿主應用程序和腳本組件類型,以及部署該腳本組件的位置,在創(chuàng)建腳本組件的實例時會有各種選項。其中最主要的差別是在本地還是遠程創(chuàng)建腳本組件的實例。如:
[code]Set local = CreateObject("ConDB.wsc") ' 實例化本地組件
Set remote= CreateObject("ConDB.wsc", "my_server") ' 實例化遠程組件[/code]
   
2、腳本組件應用實例

    編寫腳本組件不像使用 VC、VB 等高級語言編寫 COM 組件那樣需要復雜的集成開發(fā)環(huán)境。開發(fā)者只需要使用簡單的文本編輯器就可以進行腳本組件的開發(fā)。
    下面結(jié)合一個腳本組件實例(ConDB.wsc)簡要闡述應用腳本組件進行系統(tǒng)業(yè)務開發(fā)的過程。這個腳本組件將連接數(shù)據(jù)庫服務器,并打數(shù)據(jù)庫連接。
   
2.1 腳本組件文件 ConDB.wsc
[code]<?xml version="1.0"?>
<component>
 <?component error="true" debug="true"?>
 <registration
  desciption="ConDB"
  progid="ConDB.wsc"
  version="1.00"
  classid="{9247c2de-a42d-4755-aa60-8b14c1af6b4f}">
 </registration>
 <reference object="ADODB.Connection.2.8" />
 <public>
  <method name="ConToDB">
   <PARAMETER name="servername" />
   <PARAMETER name="dbname" />
   <PARAMETER name="user" />
   <PARAMETER name="password" />
  </method>
 </public>
 <implements type="ASP" id="ASP" />
 <script language="VBScript">
 <![CDATA[
 Function ConToDB(servername, dbname, user, password)
  On Error Resume Next
  Set con = CreateObject("adodb.connection")
  con.ConnectionTimeout = 25
  con.ConnectionString = "Provider=SQLOLEDB.1" & _
   ";Persist Security Info=False;User ID=" & user & _
   ";pwd=" & password & _
   ";Initial Catalog=" & dbname & _
   ";Data Source=" & servername
  con.Open
  If con.State = 1 Then
   ConToDB = "connection success!"
  End if
  If Err.Number <> 0 Then
   ConToDB = Err.Description
  End If
 End Function
 ]]>
 </script>
</component>[/code]

2.2 應用腳本組件 ConDB.wsc
    創(chuàng)建和注冊腳本組件以后,開發(fā)者就可以在 VC、VB、IE 等宿主程序中使用組件,如下是在 IE 中使用組件 ConDB.wsc 的一個例子。
[code]<%@language=vbscript%>
<html>
<body>
<%Set db = CreateObject("ConDB.wsc.1.00")
desc = db.ConToDB("(local)", "pubs", "sa", "sapwd")
response.write desc %>
</body>
</html>[/code]
    開發(fā)者除了可以像以上直接實例化組件對象使用腳本組件外,還可以為腳本組件生成一個類型庫,該類型庫包括組件的接口和成員的信息。在有些宿主應用程序(如VB)中,如果要給腳本組件編寫事件能力,則類型庫是必需的。使用類型庫可以將事件綁定到腳本組件上,并且在VB中可見。此外,在編寫腳本組件的相關VB代碼時,對象瀏覽器中將出現(xiàn)類型庫信息,從而使開發(fā)者能夠很方便地查看和使用腳本組件的方法、事件等成員、
    開發(fā)者可以像以下這樣為一個腳本組件生成類型庫。在 Windows 資源中,用鼠標右鍵單擊腳本組件文件,然后選擇“生成類型庫”。這將為腳本組件生成一個與腳本組件文件名同名的 .tlb 文件,并在 Windows 注冊表中注冊。該文件將與腳本組件文件處于同一文件夾。
    如果要更精確控制類型庫的生成,開發(fā)者可以在腳本組件文件中動態(tài)地生成類型庫,或者也可以使用命令行接口,如下為腳本組件(ConDB.wsc)創(chuàng)建一個類型庫。
[code]rundll32.exe c:\Windows\System32\scrobj.dll,GenerateTypeLib -name:ConDBLib -file:e:\component\ConDB.tlb -doc:\"ConDB component typelib\" -guid:{9247c2de-a42d-4755-aa60-8b14c1af6b4f} -major:1 -minor:0-URL:e:\components\ConDB.wsc[/code]

參見:
http://www.xav.com/perl/Windows/windows_script_components.html

發(fā)表評論 評論 (1 個評論)

回復 ganlinlao 2016-5-4 13:27
   腳本語言,現(xiàn)在微軟首推powershell。可以使用ActivePowershell,這是一個com,可以把PowerShell當vbscript那樣使用。支持c#的winform界面,可以寫classic ASP,只不過腳本語言由vbscript變成PowerShell。

facelist doodle 涂鴉板

您需要登錄后才可以評論 登錄 | 注冊

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:34 , Processed in 0.062981 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部