Windows 脚本部件  

创建脚本部件类型库

可以为 Windows® 脚本部件生成一个类型库,用来包含其接口和成员的信息。在有些宿主应用程序(如 Visual Basic)中,如果要给脚本部件启用事件能力,则类型库是必需的,而在其他宿主应用程序中,类型库则是可选的。不过,即使类型库不是必需的,生成类型库也能使脚本部件更易于使用,并在宿主应用程序中更少产生错误。

例如,如果您要使用 Visual Basic 作为宿主应用程序,使用 Reference 对话框来选择脚本部件的类型库。这样做可以将事件绑定到脚本部件上,并且在 Visual Basic 中可见。此外,在您编写脚本部件的相关 Visual Basic 代码时,Visual Basic 可以在语句结束时在对象浏览器中使用类型库信息,从而使您能够很方便地看到和使用脚本部件的属性、方法和事件。

注意   关于在宿主应用程序中使用类型库的详细信息,请参阅应用程序的文档。

创建脚本部件类型库

要更精确控制类型库的生成,您可以从脚本部件文件的脚本内动态地生成类型库,或者也可以使用命令行接口。

动态生成类型库

脚本部件运行库包括一个由Component.GenerateTypeLib 对象实现的 Automation 接口。您可以在脚本中使用这个对象从脚本部件文件内生成类型库。这对于在注册脚本部件时自动创建类型库是特别有用的。

动态创建脚本部件类型库

  1. 在脚本部件文件内的脚本中,可以使用类似下面的语法创建 Component.GenerateTypeLib 对象的一个实例:
    set oTL = CreateObject("Scriptlet.GenerateTypeLib")
  2. 可以设置Component.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 (属性) 指定的一个整数值。
  1. 调用该类型库对象的 Write 方法来创建 .tlb 文件,然后将其注册。
  2. 如果要创建一个附加类型库,请调用 GenerateTypeLib 对象的 Reset 方法来清除 AddURL 属性中的脚本部件文件的列表,重新设置 URL 以及任何其他所需的属性,然后重新调用 Write 方法。

例如,下面 <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 程序来创建类型库。

从命令提示符创建类型库

例如,下面的命令将从 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

类型库疑难解答

生成类型库的过程可能因为各种原因而失败。所得到的错误信息可能不足以在所有情形下都能确定问题的所在。如果不能生成类型库,请查看下面可能导致失败的原因清单。

请参阅

脚本部件文件的内容 | 创建注册信息 | 检查脚本部件文件中的错误 | 脚本部件文件和 XML 一致性