設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

tag 標簽: 組件

相關帖子

版塊 作者 回復/查看 最后發(fā)表

相關日志

分享 Windows 腳本組件技術(轉)
熱度 1 zhuyiwen 2016-5-4 09:36
Windows 腳本組件技術為開發(fā)者提供了用腳本語言創(chuàng)建功能強大、可復用的 COM 組件的簡便方式。開發(fā)者可以使用任何支持 Microsoft ActiveX Scripting 接口的腳本語言來創(chuàng)建腳本組件,支持這些接口的腳本語言有 JScript、VBScript 和 PERLScript 等。使用腳本組件可以為多種任務創(chuàng)建 COM 組件,如訪問和操作數(shù)據(jù)庫數(shù)據(jù)、給應用程序添加事務處理以及使用 DHTML Behavior 給 Web 頁添加交互效果等。 1、腳本組件技術 1.1 腳本組件的運行 腳本組件的運行涉及三個方面內容:腳本組件運行時程序(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 的處理程序。這些處理程序都已內置于腳本組件運行時程序中,其它處理程序可作為外接組件或嵌在相關的應用程序中。 其中,Automation 組件是最常用的 COM 組件類型,該組件擁有屬性和方法,其它應用程序可以調用這些屬性和方法。實現(xiàn)這些功能所必需的低層次 COM 接口都內置于 Automation 接口處理程序中。在腳本組件文件中只需定義需要說明的屬性、方法和事件,便可確保主應用程序對 Automation 處理程序的正確調用。 (3) 腳本組件文件屬于可擴展的標記語言(eXtensible Marked Language,簡稱 XML)文件。用戶可遵循 XML 規(guī)則來開發(fā)只包含簡單函數(shù)功能的 COM,也可開發(fā)包括外接組件的復雜 COM。 1.2 腳本組件文件的框架 Windows 腳本組件文件采用 XML 來編寫。XML 元素定義了腳本及其操作。 下面的示例演示了一個腳本組件文件的框架。 ?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 其中幾個主要腳本元素意義如下: (1) component 元素包含的是一個完整的腳本組件定義。在同一個 .wsc 文件中可出現(xiàn)多個 component 元素,但這些 component 元素應包含在一個 package 元素內。 (2) registration 元素包括用來將腳本組件注冊為 COM 組件的信息。如果宿主應用程序(如IE)在創(chuàng)建該腳本組件的實例時沒有直接用到 Windows 注冊表,則該元素可省略。 (3) script 元素包含用來實現(xiàn)腳本組件邏輯的腳本,這取決于所創(chuàng)建的 COM 組件類型。如果開發(fā)者創(chuàng)建的是 COM Automation 組件,則可以在 public 元素中聲明屬性、方法和事件,然后用一個或多個 script 元素編寫腳本來定義這些內容。 (4) reference 元素引用在腳本中需要使用的類型庫。 1.3 腳本組件的使用 在 Windows 資源管理器中,用鼠標右鍵單擊腳本組件(.wsc)文件,然后選擇“注冊”,或者使用 regsvr32.exe 注冊程序進行注冊: regsvr32 path\component_name.wsc 在創(chuàng)建和注冊 Windows 腳本組件后,就可以像使用任何 COM 組件一樣,通過宿主應用程序調用來使用該腳本組件。宿主應用程序可以是 VB、C++、IE 等應用程序。 根據(jù)宿主應用程序和腳本組件類型,以及部署該腳本組件的位置,在創(chuàng)建腳本組件的實例時會有各種選項。其中最主要的差別是在本地還是遠程創(chuàng)建腳本組件的實例。如: Set local = CreateObject("ConDB.wsc")' 實例化本地組件 Set remote= CreateObject("ConDB.wsc", "my_server")' 實例化遠程組件 2、腳本組件應用實例 編寫腳本組件不像使用 VC、VB 等高級語言編寫 COM 組件那樣需要復雜的集成開發(fā)環(huán)境。開發(fā)者只需要使用簡單的文本編輯器就可以進行腳本組件的開發(fā)。 下面結合一個腳本組件實例(ConDB.wsc)簡要闡述應用腳本組件進行系統(tǒng)業(yè)務開發(fā)的過程。這個腳本組件將連接數(shù)據(jù)庫服務器,并打數(shù)據(jù)庫連接。 2.1 腳本組件文件 ConDB.wsc ?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" ! ] /script /component 2.2 應用腳本組件 ConDB.wsc 創(chuàng)建和注冊腳本組件以后,開發(fā)者就可以在 VC、VB、IE 等宿主程序中使用組件,如下是在 IE 中使用組件 ConDB.wsc 的一個例子。 %@language=vbscript% html body %Set db = CreateObject("ConDB.wsc.1.00") desc = db.ConToDB("(local)", "pubs", "sa", "sapwd") response.write desc % /body /html 開發(fā)者除了可以像以上直接實例化組件對象使用腳本組件外,還可以為腳本組件生成一個類型庫,該類型庫包括組件的接口和成員的信息。在有些宿主應用程序(如VB)中,如果要給腳本組件編寫事件能力,則類型庫是必需的。使用類型庫可以將事件綁定到腳本組件上,并且在VB中可見。此外,在編寫腳本組件的相關VB代碼時,對象瀏覽器中將出現(xiàn)類型庫信息,從而使開發(fā)者能夠很方便地查看和使用腳本組件的方法、事件等成員、 開發(fā)者可以像以下這樣為一個腳本組件生成類型庫。在 Windows 資源中,用鼠標右鍵單擊腳本組件文件,然后選擇“生成類型庫”。這將為腳本組件生成一個與腳本組件文件名同名的 .tlb 文件,并在 Windows 注冊表中注冊。該文件將與腳本組件文件處于同一文件夾。 如果要更精確控制類型庫的生成,開發(fā)者可以在腳本組件文件中動態(tài)地生成類型庫,或者也可以使用命令行接口,如下為腳本組件(ConDB.wsc)創(chuàng)建一個類型庫。 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 參見: http://www.xav.com/perl/Windows/windows_script_components.html
個人分類: VBA|2729 次閱讀|1 個評論

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

GMT+8, 2024-10-23 08:38 , Processed in 0.068480 second(s), 15 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部