Visual FoxPro 中包括 Foxtlib ActiveX 控件(文件 Foxtlib.ocx位于 Windows 的 System 文件夹中),可以将该控件添加到应用程序中并与之一起发布。需要利用 Visual FoxPro 的 OLE 容器控件来将 ActiveX 控件添加到应用程序的表单中。
通过 Foxtlib ActiveX 控件可以从 Visual FoxPro 应用程序中访问类型库(Type Library)中的信息。类型库用于为 Automation 服务程序存放有关类的信息(属性和方法程序等)。Automation 服务程序可通过 Visual FoxPro 或 Visual Basic 创建。类型库通常使用“对象浏览器”查看,并可以被诸如 Visual Basic 或 Visual C++ 等允许对象直接引用于代码生成及编译中的其他应用程序所引用。
当使用 BUILD DLL 或 BUILD EXE 命令,或在“项目管理器”中创建 Automation 服务程序时,将生成类型库 (.tlb) 文件。类型库文件包含了每个类的信息,例如所需的参数个数及类型,控件返回值的类型,对提供有关该类更多信息的帮助主题或帮助文件的引用等。
Typelib.vcx 是应用 Foxtlib ActiveX 控件的可视类库示例,安装在 Visual Studio …\Samples\Vfp98\Classes 目录下。
有关创建自定义的 Automation 服务程序的内容,请参阅《程序员指南》第十六章“添加 OLE”中的“创建 Automation 服务程序”。
下表列出了 Foxtlib ActiveX 控件可以使用的方法程序。有关这些方法程序的详细内容,请查阅 Microsoft Developers Network。
方法程序 | 说明 |
TLLoadTypeLib(cTypeLibName) | 加载由参数 cTypeLibName 所指定的类型库。cTypeLibName 必须包括完整的路径和文件名。加载成功时,本方法程序返回值为正整数,是指向该类型库的句柄;当返回值为 0 或小于 0 时,则表示无法加载该类型库。 |
TLRelease(nTypeLibHandle) | 释放指定的已加载类型库,其句柄由参数 nTypeLibHandle 指定。 |
TLGetTypeInfoCount(nTypeLibHandle) | 返回指定类型库中类型信息的数目,该类型库的句柄由参数 nTypeLibHandle 指定。 |
TLGetDocumentation(nTypeLibHandle, aDocArray, nMemberID, nType) |
创建一个包含指定类型库信息的三元数组,该类型库的句柄由参数 nTypeLibHandle 指定。参数 aDocArray 指定了要创建数组的名称。
该三元数组包含了有关指定成员的名称、文档字符串和帮助文件的详细内容,该成员由参数 nMemberID 指定。参数 nType 指定了成员的类型:0 – 类型信息,或 1 – 成员。 |
TLGetTypeInfo(nTypeLibHandle, nTypeInfoNum) |
返回TLGetTypeAttr( )、TlGetNames( ) 和 TLGetFuncDesc( )方法程序需要的整型索引。如果 TLGetTypeInfo( ) 方法程序运行失败,则返回 0。
使用 TLGetTypeInfo( ) 方法程序在句柄由 nTypeLibHandle 指定的类型库中从 0 开始计数所有的类型信息。参数 nTypeInfoNum 指定了需返回其索引的类型信息。 |
TLGetTypeAttr(nTypeInfoIndex, aTypeArray) |
创建一个包含指定类型信息有关内容的一维数组。参数 NtypeInfoIndex 指定了类型信息的索引号。 aTypeArray 指定要创建的数组名称。
下面列出了每个数组元素所包含的内容: 1 GUID |
TIGetFuncDesc(nTypeInfoIndex, aTypeArray, n函数Index, aParmsArray) |
返回由类型信息所指定函数的信息。
该类型信息由 nTypeInfoIndex 指定。 参数 n函数Index 指定了需返回其有关信息的函数的索引。n函数Index可在 0 到函数计数值之间取值,该函数计数值由TLGetTypeAttr( )方法程序的 aTypeArray[9] 返回。 TIGetFuncDesc( ) 方法程序将创建数组,其名称由参数 aTypeArray 和 aParmsArray 指定的。 aTypeArray 数组包含有关该函数的信息。aParmsArray 数组包含该函数的参数列表。 下面列出了 aTypeArray 数组中每个元素中所包含的内容: 1 ID 下面列出函数的种类: FUNC_PUREVIRTUAL FUNC_VIRTUAL FUNC_NONVIRTUAL FUNC_STATIC FUNC_DISPATCH 下面列出调用种类: INVOKE_FUNC INVOKE_PROPERTYGET INVOKE_PROPERTYPUT INVOKE_PROPERTYPUTREF 下面列出所有标志: FUNCFLAG_FRESTRICTED = 1 FUNCFLAG_FSOURCE = 0x2 FUNCFLAG_FBINDABLE = 0x4 FUNCFLAG_FDISPLAYBIND = 0x10 FUNCFLAG_FDEFAULTBIND = 0x20 FUNCFLAG_FHIDDEN= 0x40 |
TIGetNames(nTypeInfoIndex, aNameArray, aTypeArray[1]) |
返回指定类型信息的函数数目并创建一个数组。
类型信息由参数 nTypeInfoIndex 指定, aNameArray 指定了要创建的数组名称。 aTypeArray[1]指定了从 TIGetFuncDesc( )方法中的 aTypeArray 数组所返回的 ID。 |