Database 版 (精华区)

发信人: mengy (往事如风), 信区: Database
标  题: 充分利用VFP的外部库资源
发信站: 哈工大紫丁香 (2000年12月06日20:00:41 星期三), 站内信件

充分利用VFP的外部库资源

岳训 


  本文摘要:给出在利用VISAL FOXPRO进行编程时,可使用的三种类型的外部库
资源 ActiveX 控件(.OCX 文件),动态链接库(.DLL 文件),Visual FoxPro 
外部库(.FLL 文件)的基本原理和使用方法
  关键词:外部库,ActiveX 控件,动态链接库,.FLL 文件

  一、前言

  软件设计的主要工具在于所使用的计算机语言和依附的系统环境,在利用
VISAL FOXPRO进行编程时,可使用的资源主要来处于下面两处:VFP本身的命令
.函数与外部库,一般情况下,Visual FoxPro 为您开发应用程序提供了完整的工
具。但是,有时在开发某个应用程序时,解决遇到问题所需的功能 Visual 
FoxPro没有提供。这时,最好的方法就是借助 Visual FoxPro 外部库的功能来实
现。Visual FoxPro 允许访问如下三种类型的外部库:ActiveX 控件(.OCX 文件
),动态链接库(.DLL 文件),Visual FoxPro 外部库(.FLL 文件)
  无论使用哪种库,首先必须了解访问其控件或者函数的规则。若要在一个表单
中使用 ActiveX 控件,必须知道该控件具有的属性、事件和方法程序。同样,如
果想调用一个 .DLL 文件中的函数,您必须知道该函数的名称、参数的数目和数据
类型以及返回值的数据类型。

  二、ActiveX 控件

  ActiveX 控件(.OCX 文件)。ActiveX 就是类库,其中包含能完成特定任务
的对象。大多数 ActiveX 控件可以向 Visual FoxPro 中添加新的对象,包括新型
的文本框、日历、计算器以及其他复杂的对象。随着计算机网络的发展,一些 
ActiveX 对象还具有访问电子邮件系统、访问计算机通讯接口的新的功能。
  一般来讲,当将一个 ActiveX 控件添加到 Visual FoxPro 后,您就可以象使
用任何 Visual FoxPro 基类一样来使用其中的对象。可以在程序中使用任意合适
的 ActiveX 控件。要使用一个 ActiveX 控件,需将其添加到一个表单中,然后设
置它的属性,编写处理各事件的代码,或者调用它的方法程序。使用表单工具栏或
者 OLE 容器控件可以向一个表单中添加 ActiveX 控件,也可以用代码来实现。可
以用代码创建一个 ActiveX 控件,就象创建其他的 Visual FoxPro 控件一样。但
是,在创建控件之前,必须确定控件所在的类库名称,该名称将存储在 Windows 
注册项中。如果无法确定控件所在的类库名称,您可以用“表单设计器”在任意一
个表单中加入该控件,然后查看该控件的 OLEClass 属性。这个属性记录着该控件
所在类库的名称。
  例如,计时器控件不支持用户交互的方法。但是,您仍可以在表单中创建这个
控件,因为该控件一般默认为显示状态(用图标显示)。通常,您不能更换该图标
或调整其大小。
  在应用程序中,如果不想显示非交互式的控件,您可以通过设置其 OLE 容器
控件的 Visible 属性为“假”(.F.),或者设置它的 Left 属性为负值(如 -100
),将其移到屏幕的现区域以外。另外的方法是将该控件添加到一个不可见的表单
上(就是说,该表单的 Show 方法程序从未被调用)。无论怎样,您均可调用该控
件的方法程序,就象控件可见一样。

  三、动态链接库

  动态链接库(.DLL 文件)。一个 .DLL 文件是一个函数库,这些函数可以被
 Visual FoxPro 程序调用,就象调用 Visual FoxPro 中的自定义函数一样。事实
上,许多 Windows 程序(包括 Windows 本身)都要使用动态链接库将其本身的功
能提供给其他应用程序使用。
  .DLL是"动态链接库"的简称.是一种可执行模块库,它是在程序运行时链接
的。程序调用一个DLL时,WINDOWS会将其载入。只要用到某个DLL,它就会一直驻
留在内存中,可同时由几个应用程序共享。WINDOWS系统都是由DLL组成的。它提供
了应用程序和DLL两种可执行模块:可执行(EXE)应用程序的作用是执行某种任务
;而DLL资源只能作为一种函数使用,由应用程序对其调用,从而执行某种特定的
操作。
  如果需要调用的函数在某 DLL 中,可以链接该库,再调用那个函数。在调用
一个 DLL 函数之前,必须了解该函数的调用协议,包括函数的名称,参数的数目
和类型以及返回值类型。下面给出要调用一个 DLL 函数的方法:
  1:使用 DECLARE命令注册 DLL 函数,函数的名称区分大小写。
  如果指定 WIN32API 为库名称,Visual FoxPro 将在 KERNEL32.DLL、GDI32.
DLL、USER32.DLL、MPR.DLL 和 ADVAPI32.DLL 中查找被调用的 32 位 Windows 
DLL 函数。 2:象调用其它 Visual FoxPro 函数一样调用 DLL 函数。
  包含所要注册函数的 DLL 必须存放在默认目录、Windows 或 System 目录里
,或者在 DOS 路径中。
  如果要调用的函数和 Visual FoxPro 中已存在的函数(内部函数或者前面声
明的 DLL 函数)重名,您可以保存重复的名字,再为该函数取一个别名,然后用
别名来调用它。
  在退出 Visual FoxPro 之前,所链接的 DLL 函数一直保持有效,因此,在每
个工作期中只需声明一次。如果不想再调用 DLL 中的函数,可以执行 CLEAR DLLS
 命令将其从内存中清除以节省资源。 执行 CLEAR DLLS 命令时,将从内存中清除
所有已声明的 DLL 函数。在注册一个 DLL 函数时,必须指定参数的数目和类型。
默认情况下,数据按照值来传递。也可以在参数前面添加符号 (@) 来强制参数按
引用传递。

  四、Visual FoxPro库

  Visual FoxPro 外部库(.FLL 文件)。.FLL 文件和 .DLL 文件很相似,但它
使用特殊的协议来和 Visual FoxPro 共享数据,同时经常会调用内部的 Visual 
FoxPro 函数。因此,FLL 文件不象 .DLL 文件那样可以被任意的 Windows 程序调
用,而只能由 Visual FoxPro 调用。在 Visual FoxPro 中,您可以象调用其它用
户自定义函数一样调用 .FLL 文件中的函数。。FLL文件(Fox Link Library)是
一种VFP提供的动态程序库文件,用C语言创建的与VISAL FOXPRO兼容的。DLL,用
以扩展VISUAL FOXPRO的功能。载入一个FLL以后,我们编写的应用程序可根据需要
调用它。在Visual foxpro安装以后,在其VFP目录下,一般说来,可有如下四个。
FLL文件:FOXTOOLS。FLL,FD3。FLL,WIZARDS。FLL,RESERVED。FLL。
  象 DLL 一样,Visual FoxPro 库(.FLL 文件)包含了可调用的函数。因为 
.FLL 文件是专门为 Visual FoxPro 内部调用建立的,因而很容易同 .FLL 之间进
行数据传递。 如果要使用一个 Visual FoxPro 库,首先指定 .FLL 文件的名称,
然后调用此函数。和注册 DLL 函数不同,您无须注册 FLL 文件中的每个函数,也
没有必要指定该函数所需参数和数据类型。下面给出调用一个 .FLL 函数的方法:

  1: 使用 SET LIBRARY 命令注册 .FLL 函数。 
  2: 象调用其它函数一样调用库中的任意函数。
  例如,下面的程序从 FOXTOOLS.FLL 库中调用一个函数,来指定 C:驱动器是
什么样的驱动器:
  SET LIBRARY TO "C:\VFP\FOXTOOLS.FLL"? DriveType("C:")
  如果所注册的 .FLL 文件不只一个,请在 SET LIBRARY 命令中包含 ADDITIVE
 关键字。否则,前面注册的 .FLL 文件将被清除,被最近注册的文件代替。装入
后的FOXTOOLS。FLL库中的函数可用LIST STATUS查看,FOXTOOLS 库中的函数允许
设置和查询文件信息、管理路径和文件名、使用系统警告和执行其他许多的函数。

  如果函数名称和 Visual FoxPro 中已存在的函数名称冲突,则最后定义的函
数优先;如果链接库中的函数名称和 Visual FoxPro 中的内部函数名称冲突,则
 Visual FoxPro 的内部函数优先。
  在退出 Visual FoxPro 之前,.FLL 文件中的函数一直保持有效,因此在每个
工作期中只需注册一次。如果不想再使用 .FLL 文件中的函数,可以使用 RELEASE
 LIBRARY、RELEASE ALL 或者 SET LIBRARY TO 命令将其从内存中清除,以节省资
源。

  五 结束语

  根据开发的系统需要,选择合适的VFP外部库资源,可充分发挥编写者的聪明
才干,并使开发的系统具有与硬件无关,明显的高效益和广泛的适应性。


--

       大海无边天做岸
               山登绝顶我为风

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.617毫秒