可以为 Windows® 脚本部件生成一个类型库,用来包含其接口和成员的信息。在有些宿主应用程序(如 Visual Basic)中,如果要给脚本部件启用事件能力,则类型库是必需的,而在其他宿主应用程序中,类型库则是可选的。不过,即使类型库不是必需的,生成类型库也能使脚本部件更易于使用,并在宿主应用程序中更少产生错误。
例如,如果您要使用 Visual Basic 作为宿主应用程序,使用 Reference 对话框来选择脚本部件的类型库。这样做可以将事件绑定到脚本部件上,并且在 Visual Basic 中可见。此外,在您编写脚本部件的相关 Visual Basic 代码时,Visual Basic 可以在语句结束时在对象浏览器中使用类型库信息,从而使您能够很方便地看到和使用脚本部件的属性、方法和事件。
注意 关于在宿主应用程序中使用类型库的详细信息,请参阅应用程序的文档。
创建脚本部件类型库
这将为脚本部件生成一个.tlb 文件,其文件名与脚本部件文件名相同,并在 Windows 注册表中注册。该文件位于 .wsc 文件所处的文件夹。
要更精确控制类型库的生成,您可以从脚本部件文件的脚本内动态地生成类型库,或者也可以使用命令行接口。
脚本部件运行库包括一个由Component.GenerateTypeLib 对象实现的 Automation 接口。您可以在脚本中使用这个对象从脚本部件文件内生成类型库。这对于在注册脚本部件时自动创建类型库是特别有用的。
动态创建脚本部件类型库
set oTL = CreateObject("Scriptlet.GenerateTypeLib")
属性/方法 | 描述 |
---|---|
AddURL | (方法) 添加脚本部件的 URL 来生成类型库。您可以多次调用该方法属性,从而使类型库中包含多个脚本部件。 |
Path | (属性) 类型库的路径和文件名。如缺省路径是当前路径,缺省文件名是带有 .tlb 扩展名的脚本部件文件名。果该对象不能创建所指定的类型库,则将在脚本部件所处目录下缺省创建一个名为component.tlb 的类型库。 |
Doc | (属性) 是一个字符串,包含与类型库信息一起存储在注册表中的任何信息。 |
GUID | (属性) 该类型库的 GUID。(不是脚本部件的 GUID。)如果不提供这个值,则GenerateTypeLib 对象将创建一个,但是这样在每个机器上类型库将具有不同的GUID。GUID 必须遵照以下格式,其中 x 代表十六进制值:
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} |
Name | (属性) 类型库的内部名称。有些应用程序(如 Visual Basic Object Browser)将显示该名字。 |
MajorVersion | (属性) 指定的一个整数值。 |
MinorVersion | (属性) 指定的一个整数值。 |
例如,下面 <registration> 元素中的脚本将动态创建一个类型库。
注意 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 的内部名称。 oTL.MajorVersion = 1 oTL.MinorVersion = 0 oTL.Write ' 将 tlib 写入磁盘。 oTL.Reset ' 清除 AddURL 中的 URL 列表。 End Function ]]> </script> </registration>
如果喜欢使用“命令提示符”窗口,则可以调用 Rundll32.exe 程序来创建类型库。
从命令提示符创建类型库
rundll32.exe path\scrobj.dll,GenerateTypeLib options
其中:
-name:Name |
---|
-file:Path |
-doc:\"Doc\" |
-guid:GUID |
-major:MajorVersion |
-minor:MinorVersion |
-URL:AddURL |
例如,下面的命令将从 MyComponent.wsc 这个脚本部件创建一个称为 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
生成类型库的过程可能因为各种原因而失败。所得到的错误信息可能不足以在所有情形下都能确定问题的所在。如果不能生成类型库,请查看下面可能导致失败的原因清单。
注意 可以定义一个 get 和 put 属性函数的参数个数不相同的脚本部件,只是不能为该脚本部件创建一个类型库。