visual foxpro foxtlib 控件

请参阅

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
2 LocaleID
3 保留
4 Constructor ID
5 Destructor ID
6 保留
7 实例大小
8 类型种类
9 函数数目
10 变量 / 成员数目
11 应用接口数目
12 类型的可视函数表大小
13 该类型的一个实例的字节队列
14 标志
15 主版本号
16 副版本号

TIGetFuncDesc(nTypeInfoIndex,
aTypeArray, n函数Index, aParmsArray)
返回由类型信息所指定函数的信息。

该类型信息由 nTypeInfoIndex 指定。

参数 n函数Index 指定了需返回其有关信息的函数的索引。n函数Index可在 0 到函数计数值之间取值,该函数计数值由TLGetTypeAttr( )方法程序的 aTypeArray[9] 返回。

TIGetFuncDesc( ) 方法程序将创建数组,其名称由参数 aTypeArrayaParmsArray 指定的。

aTypeArray 数组包含有关该函数的信息。aParmsArray 数组包含该函数的参数列表。

下面列出了 aTypeArray 数组中每个元素中所包含的内容:

1 ID
2 函数种类 – 指出该函数是否是可视、静态或仅用于调度的
3 调用种类 – 调用的种类;指出这是否是一个属性函数及其函数类型
4 调用约定–指定该函数的调用约定
5 参数数目总计
6 可选参数数目
7 对于函数 FUNC_VIRTUAL,指定其在虚拟函数表中的偏移量
8 允许的 Scodes 数量。
9 标志

下面列出函数的种类:

FUNC_PUREVIRTUAL
该函数通过虚拟函数表访问并有一个“this”隐含指针。

FUNC_VIRTUAL
该函数访问方式与 PUREVIRTUAL 相同,但该函数可以执行。

FUNC_NONVIRTUAL
该函数由静态地址访问并有一个“this”隐含指针。

FUNC_STATIC
该函数由静态地址访问但没有“this”隐含指针。

FUNC_DISPATCH
该函数只能通过 Idispatch访问。

下面列出调用种类:

INVOKE_FUNC
该成员通过正常函数调用语法调用。

INVOKE_PROPERTYGET
该函数通过正常属性访问语法调用。

INVOKE_PROPERTYPUT
该函数通过属性值分配语法调用。典型的程序语言可能都使用同样的分配方法改变属性值;例如,Object.属性 := Value.

INVOKE_PROPERTYPUTREF
该函数通过属性参考分配语法调用。

下面列出所有标志:

FUNCFLAG_FRESTRICTED = 1
该函数不能从宏语言中访问。 该标志对于系统级或类型浏览器不可见的函数有意义。

FUNCFLAG_FSOURCE = 0x2
该函数返回一个作为事件源的对象。

FUNCFLAG_FBINDABLE = 0x4
该函数支持数据绑定。

FUNCFLAG_FDISPLAYBIND = 0x10
该函数对用户显示为可绑定,同时,也必须设置 FUNC_FBINDABLE。

FUNCFLAG_FDEFAULTBIND = 0x20
该函数最适于描述对象。在一个类型信息中只能有一个函数具有此属性。

FUNCFLAG_FHIDDEN= 0x40
该函数不显示给用户,尽管它存在并且可绑定。

TIGetNames(nTypeInfoIndex,
aNameArray, aTypeArray[1])
返回指定类型信息的函数数目并创建一个数组。

类型信息由参数 nTypeInfoIndex 指定, aNameArray 指定了要创建的数组名称。

aTypeArray[1]指定了从 TIGetFuncDesc( )方法中的 aTypeArray 数组所返回的 ID。