可以為 Windows® 腳本部件生成一個(gè)類型庫,用來包含其接口和成員的信息。在有些宿主應(yīng)用程序(如 Visual Basic)中,如果要給腳本部件啟用事件能力,則類型庫是必需的,而在其他宿主應(yīng)用程序中,類型庫則是可選的。不過,即使類型庫不是必需的,生成類型庫也能使腳本部件更易于使用,并在宿主應(yīng)用程序中更少產(chǎn)生錯(cuò)誤。
例如,如果您要使用 Visual Basic 作為宿主應(yīng)用程序,使用 Reference 對(duì)話框來選擇腳本部件的類型庫。這樣做可以將事件綁定到腳本部件上,并且在 Visual Basic 中可見。此外,在您編寫腳本部件的相關(guān) Visual Basic 代碼時(shí),Visual Basic 可以在語句結(jié)束時(shí)在對(duì)象瀏覽器中使用類型庫信息,從而使您能夠很方便地看到和使用腳本部件的屬性、方法和事件。
注意 關(guān)于在宿主應(yīng)用程序中使用類型庫的詳細(xì)信息,請(qǐng)參閱應(yīng)用程序的文檔。
創(chuàng)建腳本部件類型庫
這將為腳本部件生成一個(gè).tlb 文件,其文件名與腳本部件文件名相同,并在 Windows 注冊(cè)表中注冊(cè)。該文件位于 .wsc 文件所處的文件夾。
要更精確控制類型庫的生成,您可以從腳本部件文件的腳本內(nèi)動(dòng)態(tài)地生成類型庫,或者也可以使用命令行接口。
腳本部件運(yùn)行庫包括一個(gè)由Component.GenerateTypeLib 對(duì)象實(shí)現(xiàn)的 Automation 接口。您可以在腳本中使用這個(gè)對(duì)象從腳本部件文件內(nèi)生成類型庫。這對(duì)于在注冊(cè)腳本部件時(shí)自動(dòng)創(chuàng)建類型庫是特別有用的。
動(dòng)態(tài)創(chuàng)建腳本部件類型庫
set oTL = CreateObject("Scriptlet.GenerateTypeLib")
| 屬性/方法 | 描述 |
|---|---|
| AddURL | (方法) 添加腳本部件的 URL 來生成類型庫。您可以多次調(diào)用該方法屬性,從而使類型庫中包含多個(gè)腳本部件。 |
| Path | (屬性) 類型庫的路徑和文件名。如缺省路徑是當(dāng)前路徑,缺省文件名是帶有 .tlb 擴(kuò)展名的腳本部件文件名。果該對(duì)象不能創(chuàng)建所指定的類型庫,則將在腳本部件所處目錄下缺省創(chuàng)建一個(gè)名為component.tlb 的類型庫。 |
| Doc | (屬性) 是一個(gè)字符串,包含與類型庫信息一起存儲(chǔ)在注冊(cè)表中的任何信息。 |
| GUID | (屬性) 該類型庫的 GUID。(不是腳本部件的 GUID。)如果不提供這個(gè)值,則GenerateTypeLib 對(duì)象將創(chuàng)建一個(gè),但是這樣在每個(gè)機(jī)器上類型庫將具有不同的GUID。GUID 必須遵照以下格式,其中 x 代表十六進(jìn)制值:
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
|
| Name | (屬性) 類型庫的內(nèi)部名稱。有些應(yīng)用程序(如 Visual Basic Object Browser)將顯示該名字。 |
| MajorVersion | (屬性) 指定的一個(gè)整數(shù)值。 |
| MinorVersion | (屬性) 指定的一個(gè)整數(shù)值。 |
例如,下面 <registration> 元素中的腳本將動(dòng)態(tài)創(chuàng)建一個(gè)類型庫。
注意 CDATA 項(xiàng)是必需的,將使 <script> 元素中的腳本成為不透明的。詳細(xì)信息請(qǐng)參閱 腳本部件文件和 XML 一致性。
<registration
description="My Test Component"
progid="Component.TestScript"
version="1"
classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}">
<script language="VBScript">
<![CDATA[
Function Register()
Set oTL = CreateObject("Scriptlet.GenerateTypeLib")
oTL.AddURL "d:\components\MyComponent.wsc" ' 腳本部件的 URL。
oTL.AddURL "d:\components\YourComponent.wsc"
oTL.Path = "d:\components\MyComponent.tlb" ' .tlb 路徑。
oTL.Doc = "Sample component typelib" ' 文檔字符串。
oTL.GUID = "{a1e1e3e0-a252-11d1-9fa1-00a0c90fffc0}"
oTL.Name = "MyComponentTLib" ' tlb 的內(nèi)部名稱。
oTL.MajorVersion = 1
oTL.MinorVersion = 0
oTL.Write ' 將 tlib 寫入磁盤。
oTL.Reset ' 清除 AddURL 中的 URL 列表。
End Function
]]>
</script>
</registration>
如果喜歡使用“命令提示符”窗口,則可以調(diào)用 Rundll32.exe 程序來創(chuàng)建類型庫。
從命令提示符創(chuàng)建類型庫
rundll32.exe path\scrobj.dll,GenerateTypeLib options
其中:
| -name:Name |
|---|
| -file:Path |
| -doc:\"Doc\" |
| -guid:GUID |
| -major:MajorVersion |
| -minor:MinorVersion |
| -URL:AddURL |
例如,下面的命令將從 MyComponent.wsc 這個(gè)腳本部件創(chuàng)建一個(gè)稱為 MyComponent.tlb 的類型庫(為清楚起見,該命令分成多行顯示):
rundll32.exe c:\winnt\system32\scrobj.dll,GenerateTypeLib
-name:MyComponentTLib -file:d:\components\MyComponent.tlb
-doc:\"Sample component typelib\"
-guid:{a1e1e3e0-a252-11d1-9fa1-00a0c90fffc0} -major:1 -minor:0
-URL:d:\components\MyComponent.wsc
生成類型庫的過程可能因?yàn)楦鞣N原因而失敗。所得到的錯(cuò)誤信息可能不足以在所有情形下都能確定問題的所在。如果不能生成類型庫,請(qǐng)查看下面可能導(dǎo)致失敗的原因清單。
注意 可以定義一個(gè) get 和 put 屬性函數(shù)的參數(shù)個(gè)數(shù)不相同的腳本部件,只是不能為該腳本部件創(chuàng)建一個(gè)類型庫。
腳本部件文件的內(nèi)容 | 創(chuàng)建注冊(cè)信息 | 檢查腳本部件文件中的錯(cuò)誤 | 腳本部件文件和 XML 一致性