可以為 Windows® 腳本部件生成一個類型庫,用來包含其接口和成員的信息。在有些宿主應(yīng)用程序(如 Visual Basic)中,如果要給腳本部件啟用事件能力,則類型庫是必需的,而在其他宿主應(yīng)用程序中,類型庫則是可選的。不過,即使類型庫不是必需的,生成類型庫也能使腳本部件更易于使用,并在宿主應(yīng)用程序中更少產(chǎn)生錯誤。
例如,如果您要使用 Visual Basic 作為宿主應(yīng)用程序,使用 Reference 對話框來選擇腳本部件的類型庫。這樣做可以將事件綁定到腳本部件上,并且在 Visual Basic 中可見。此外,在您編寫腳本部件的相關(guān) Visual Basic 代碼時,Visual Basic 可以在語句結(jié)束時在對象瀏覽器中使用類型庫信息,從而使您能夠很方便地看到和使用腳本部件的屬性、方法和事件。
注意 關(guān)于在宿主應(yīng)用程序中使用類型庫的詳細信息,請參閱應(yīng)用程序的文檔。
創(chuàng)建腳本部件類型庫
這將為腳本部件生成一個.tlb 文件,其文件名與腳本部件文件名相同,并在 Windows 注冊表中注冊。該文件位于 .wsc 文件所處的文件夾。
要更精確控制類型庫的生成,您可以從腳本部件文件的腳本內(nèi)動態(tài)地生成類型庫,或者也可以使用命令行接口。
腳本部件運行庫包括一個由Component.GenerateTypeLib 對象實現(xiàn)的 Automation 接口。您可以在腳本中使用這個對象從腳本部件文件內(nèi)生成類型庫。這對于在注冊腳本部件時自動創(chuàng)建類型庫是特別有用的。
動態(tài)創(chuàng)建腳本部件類型庫
set oTL = CreateObject("Scriptlet.GenerateTypeLib")
屬性/方法 | 描述 |
---|---|
AddURL | (方法) 添加腳本部件的 URL 來生成類型庫。您可以多次調(diào)用該方法屬性,從而使類型庫中包含多個腳本部件。 |
Path | (屬性) 類型庫的路徑和文件名。如缺省路徑是當(dāng)前路徑,缺省文件名是帶有 .tlb 擴展名的腳本部件文件名。果該對象不能創(chuàng)建所指定的類型庫,則將在腳本部件所處目錄下缺省創(chuàng)建一個名為component.tlb 的類型庫。 |
Doc | (屬性) 是一個字符串,包含與類型庫信息一起存儲在注冊表中的任何信息。 |
GUID | (屬性) 該類型庫的 GUID。(不是腳本部件的 GUID。)如果不提供這個值,則GenerateTypeLib 對象將創(chuàng)建一個,但是這樣在每個機器上類型庫將具有不同的GUID。GUID 必須遵照以下格式,其中 x 代表十六進制值:
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} |
Name | (屬性) 類型庫的內(nèi)部名稱。有些應(yīng)用程序(如 Visual Basic Object Browser)將顯示該名字。 |
MajorVersion | (屬性) 指定的一個整數(shù)值。 |
MinorVersion | (屬性) 指定的一個整數(shù)值。 |
例如,下面 <registration> 元素中的腳本將動態(tài)創(chuàng)建一個類型庫。
注意 CDATA 項是必需的,將使 <script> 元素中的腳本成為不透明的。詳細信息請參閱 腳本部件文件和 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 這個腳本部件創(chuàng)建一個稱為 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
生成類型庫的過程可能因為各種原因而失敗。所得到的錯誤信息可能不足以在所有情形下都能確定問題的所在。如果不能生成類型庫,請查看下面可能導(dǎo)致失敗的原因清單。
注意 可以定義一個 get 和 put 屬性函數(shù)的參數(shù)個數(shù)不相同的腳本部件,只是不能為該腳本部件創(chuàng)建一個類型庫。
腳本部件文件的內(nèi)容 | 創(chuàng)建注冊信息 | 檢查腳本部件文件中的錯誤 | 腳本部件文件和 XML 一致性