注冊(cè) 登錄
Office中國(guó)論壇/Access中國(guó)論壇 返回首頁(yè)

zhuyiwen的個(gè)人空間 http://m.mzhfr.cn/?625 [收藏] [復(fù)制] [分享] [RSS]

日志

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

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

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

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

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

    編寫腳本組件不像使用 VC、VB 等高級(jí)語(yǔ)言編寫 COM 組件那樣需要復(fù)雜的集成開發(fā)環(huán)境。開發(fā)者只需要使用簡(jiǎn)單的文本編輯器就可以進(jìn)行腳本組件的開發(fā)。
    下面結(jié)合一個(gè)腳本組件實(shí)例(ConDB.wsc)簡(jiǎn)要闡述應(yīng)用腳本組件進(jìn)行系統(tǒng)業(yè)務(wù)開發(fā)的過程。這個(gè)腳本組件將連接數(shù)據(jù)庫(kù)服務(wù)器,并打數(shù)據(jù)庫(kù)連接。
   
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 應(yīng)用腳本組件 ConDB.wsc
    創(chuàng)建和注冊(cè)腳本組件以后,開發(fā)者就可以在 VC、VB、IE 等宿主程序中使用組件,如下是在 IE 中使用組件 ConDB.wsc 的一個(gè)例子。
[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ā)者除了可以像以上直接實(shí)例化組件對(duì)象使用腳本組件外,還可以為腳本組件生成一個(gè)類型庫(kù),該類型庫(kù)包括組件的接口和成員的信息。在有些宿主應(yīng)用程序(如VB)中,如果要給腳本組件編寫事件能力,則類型庫(kù)是必需的。使用類型庫(kù)可以將事件綁定到腳本組件上,并且在VB中可見。此外,在編寫腳本組件的相關(guān)VB代碼時(shí),對(duì)象瀏覽器中將出現(xiàn)類型庫(kù)信息,從而使開發(fā)者能夠很方便地查看和使用腳本組件的方法、事件等成員、
    開發(fā)者可以像以下這樣為一個(gè)腳本組件生成類型庫(kù)。在 Windows 資源中,用鼠標(biāo)右鍵單擊腳本組件文件,然后選擇“生成類型庫(kù)”。這將為腳本組件生成一個(gè)與腳本組件文件名同名的 .tlb 文件,并在 Windows 注冊(cè)表中注冊(cè)。該文件將與腳本組件文件處于同一文件夾。
    如果要更精確控制類型庫(kù)的生成,開發(fā)者可以在腳本組件文件中動(dòng)態(tài)地生成類型庫(kù),或者也可以使用命令行接口,如下為腳本組件(ConDB.wsc)創(chuàng)建一個(gè)類型庫(kù)。
[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ā)表評(píng)論 評(píng)論 (1 個(gè)評(píng)論)

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

facelist doodle 涂鴉板

您需要登錄后才可以評(píng)論 登錄 | 注冊(cè)

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 08:44 , Processed in 0.073982 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部