FoxPro for Windows 远程拨号通讯功能的设计与实现

时间:2022-08-03 04:01:48

FoxPro for Windows 远程拨号通讯功能的设计与实现

计算机远程传输系统是实现不同区域信息联接的信息系统,采用以计算机、 调制解调器(MODEM)并通过电话线路组建设计算机远程传输系统不失为一种廉价而且有效的 构造方案。采用这 种硬件构造方案,必须配套以相应的传输工作软件,实现不同区域的信息协调工作。目前 F ox Pro for Windows 的流行使之日益成为我们程序设计的首选语言,但 FoxPro for Windows 语言本身并未提供远程拨号通讯的设计功能。本文就此提出一种简单、实用的解决方案。?

1. 设计思想?

在 FoxPro for Windows 提供了一类特殊动态连接库:FoxTools.fll。在这个动态连接库中 提供了几十种实用的函数,其中最为实用的是它提供了可直接调用 Windows API 的接口函 数:RegFn () 和 CallFn ()。Windows 在其API提供了丰富的函数调用功能,其中包含了如 OpenComm()、WriteComm()、Close Comm()等实用的通讯函数功能。FoxTools.FLL架起了它 们之间沟通的桥梁。基于此,我们就可以驾驭这些API函数实现我们所需要的通讯功能。?

2. FoxTools.FLL的导入

FoxTools.FLL提供于FoxPro for Windows的安装目录FOXPROW的一级子目录下在编程过程中 ,我们宜将FoxTools.FLL放置于应用程序的主程序的开始部分,以便于后继程序的调用。通 常对FoxTools.fll的导入命令格式如下:?

SET LIBRARY TO “FOXTOOLS.FLL”ADDITIVE?

如果我们在工程文件PROJECT中能用ADD命令加入库(Library)文件,将FoxTools.Fll的置于 所生成的EXE文件中,就可以避免在提交EXE文件时也必须附带FoxTools.FLL的繁琐。?

3. 注册与执行API函数方法?

3.1 注册API函数?

采用FoxTools.FLL的RegFn()可以实现Windows API的函数的注册,命令格式如下:?

RegFn(<API函数名称>,<参数类型>,<返回值类型>,<API函数库名称>)?

其中:〖ZK(〗<API函数名称>为我们所要登记的API函数名称。?

<参数类型>为所要传递的参数类型,共有六种:?

① I:整型?

② L:长型?

③ S:传址方式字符型?

④ C:传值方式字符型?

⑤ F:浮点型?

⑥ D:双精度型?

<返回值类型>为本函数调用返回值的类型,有以下五种:?

① I:整型?

② L:长型?

③ S:传址方式字符型?

④ F:浮点型?

⑤ D:双精度型?

<API函数库名称>为容含所注册API函数库的名称,注意需写明包括扩展名在内的 全称,如GDI.EXE等。?

3.2 执行API函数?

采用FoxTools.FII的CallFn()可以执行已注册成功的Windows API的函数,语法格式如下: ?

CallFn(<API函数注册名称>,[<调用参数1>,[<调用参数2>]]…)?

其中:<API函数注册名称>为我们在RegFn()注册API函数后返回的名称。?

<调用参数>为调用该API函数所需要的参数。?

4. 调制解调器设计函数?

Windows API 函数中有关通讯的函数原型如下:?

4.1 〖ZK(〗打开通讯信道函数 OpenComm ()?

OpenComm(LPSTR 1pCommName, WORD wInQueue, WORD wOutQueue)?

其中:<1pCommName>为通讯端口名称,如LPT1、COM1等?

<wInQueue>为所接受的数据队列的长度,一般置为1024。?

<wOutQueue>同上?

4.2 [ZK(]传递通讯信息函数 WriteComm()\=

WriteComm(int nCid, LPSTR 1pBuf, int Size)\=

其中:<nCid>为OpenComm()函数返回的信道标志?

<1pBuf>为传输的缓冲内容?

<Size>为传输的缓冲大小?

4.3 关闭通讯信道函数CloseComm()?

CloseComm(nCid)?

其中:<nCid>为OpenComm()函数返回的信道标志。?

5. 设计实例?

我们根据上述设计思想,设计了一段程序说明远程通讯功能的具体实现方法,该程序只是简 单地完成一个通过电话线拨号功能。?

Set Library to "Foxtools.fll" Additive &&打开数据库?

Open=RegFn("OpenComm","CII","I") &&注册Open函数\=

Write=RegFn("WriteComm","ICI","I") &&注册Write函数?

Close=RegFn("CloseComm","I","I") &&注册Close函数?

*[CDD19*2]?[CDD19*2][HJ1.6mm]?

*调用 Open 函数打开COM2通讯端口?

*[CDD19*2]?[CDD19*2][HJ1.6mm]?

Com2=CallFn(Open,"COM2",100,100)\=

*[CDD19*2]?[CDD19*2][HJ1.6mm]?

*设置拨号电话号码?

*[CDD19*2]?[CDD19*2][HJ1.6mm]?

Telno="ATTD 3608511"+chr(13)\=

*[CDD19*2]?[CDD19*2][HJ1.6mm]?

*调用Write函数拨号?

*[CDD19*2][CDD19*2][HJ1.6mm]?

Restcall=CallFn(Write,Com2,Telno,len(Telno))\=

If Restcall<0?

Wait Window "传输故障,请检查线路!"?

Endif\=

*[CDD19*2]?[CDD19*2][HJ1.6mm]?

*调用Write函数结束传输?

*[CDD19*2]?[CDD19*2][HJ1.6mm]?

S="ATHO"+chr(13)\=

Restcall=CallFn(Write,Com2,S,len(S))\=

If Restcall<0?

Wait Window "传输故障,请检查线路!"?

Endif\=

Restcall=CallFn(Close,Com2)=

If Restcall<0?

Wait Window "线路关闭故障,请检查线路!"?

Endif?

6.结束语?

根据上述的设计思想,我们可以实现基本的计算机远程拨号通讯功能。文中所述在中文Wind ows 3.2环境下,用FoxPro for Windows 2.5b程序设计语言实现并通过。 ?

上一篇:医学影像存档与通讯系统的开发与初步应用 下一篇:VB环境下实现PC机与单片机(8031)的串行通讯