- 相關推薦
FoxPro for Windows 遠程撥號通訊功能的設計與實現(xiàn)
計算機遠程傳輸系統(tǒng)是實現(xiàn)不同區(qū)域信息聯(lián)接的信息系統(tǒng),采用以計算機、 調制解調器(MODEM)并通過電話線路組建設計算機遠程傳輸系統(tǒng)不失為一種廉價而且有效的 構造方案。采用這 種硬件構造方案,必須配套以相應的傳輸工作軟件,實現(xiàn)不同區(qū)域的信息協(xié)調工作。目前 F ox Pro for Windows 的流行使之日益成為我們程序設計的首選語言,但 FoxPro for Windows 語言本身并未提供遠程撥號通訊的設計功能。本文就此提出一種簡單、實用的解決方案。?1. 設計思想?
在 FoxPro for Windows 提供了一類特殊動態(tài)連接庫:FoxTools.fll。在這個動態(tài)連接庫中 提供了幾十種實用的函數(shù),其中最為實用的是它提供了可直接調用 Windows API 的接口函 數(shù):RegFn () 和 CallFn ()。Windows 在其API提供了豐富的函數(shù)調用功能,其中包含了如 OpenComm()、WriteComm()、Close Comm()等實用的通訊函數(shù)功能。FoxTools.FLL架起了它 們之間溝通的橋梁;诖耍覀兙涂梢择{馭這些API函數(shù)實現(xiàn)我們所需要的通訊功能。?
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. 注冊與執(zhí)行API函數(shù)方法?
3.1 注冊API函數(shù)?
采用FoxTools.FLL的RegFn()可以實現(xiàn)Windows API的函數(shù)的注冊,命令格式如下:?
RegFn(<API函數(shù)名稱>,<參數(shù)類型>,<返回值類型>,<API函數(shù)庫名稱>)?
其中:〖ZK(〗<API函數(shù)名稱>為我們所要登記的API函數(shù)名稱。?
<參數(shù)類型>為所要傳遞的參數(shù)類型,共有六種:?
① I:整型?
② L:長型?
③ S:傳址方式字符型?
④ C:傳值方式字符型?
⑤ F:浮點型?
⑥ D:雙精度型?
<返回值類型>為本函數(shù)調用返回值的類型,有以下五種:?
① I:整型?
② L:長型?
③ S:傳址方式字符型?
④ F:浮點型?
⑤ D:雙精度型?
<API函數(shù)庫名稱>為容含所注冊API函數(shù)庫的名稱,注意需寫明包括擴展名在內的 全稱,如GDI.EXE等。?
3.2 執(zhí)行API函數(shù)?
采用FoxTools.FII的CallFn()可以執(zhí)行已注冊成功的Windows API的函數(shù),語法格式如下: ?
CallFn(<API函數(shù)注冊名稱>,[<調用參數(shù)1>,[<調用參數(shù)2>]]…)?
其中:<API函數(shù)注冊名稱>為我們在RegFn()注冊API函數(shù)后返回的名稱。?
<調用參數(shù)>為調用該API函數(shù)所需要的參數(shù)。?
4. 調制解調器設計函數(shù)?
Windows API 函數(shù)中有關通訊的函數(shù)原型如下:?
4.1 〖ZK(〗打開通訊信道函數(shù) OpenComm ()?
OpenComm(LPSTR 1pCommName, WORD wInQueue, WORD wOutQueue)?
其中:<1pCommName>為通訊端口名稱,如LPT1、COM1等?
<wInQueue>為所接受的數(shù)據(jù)隊列的長度,一般置為1024。?
<wOutQueue>同上?
4.2 [ZK(]傳遞通訊信息函數(shù) WriteComm()\=
WriteComm(int nCid, LPSTR 1pBuf, int Size)\=
其中:<nCid>為OpenComm()函數(shù)返回的信道標志?
<1pBuf>為傳輸?shù)木彌_內容?
<Size>為傳輸?shù)木彌_大小?
4.3 關閉通訊信道函數(shù)CloseComm()?
CloseComm(nCid)?
其中:<nCid>為OpenComm()函數(shù)返回的信道標志。?
5. 設計實例?
我們根據(jù)上述設計思想,設計了一段程序說明遠程通訊功能的具體實現(xiàn)方法,該程序只是簡 單地完成一個通過電話線撥號功能。?
Set Library to "Foxtools.fll" Additive &&打開數(shù)據(jù)庫?
Open=RegFn("OpenComm","CII","I") &&注冊Open函數(shù)\=
Write=RegFn("WriteComm","ICI","I") &&注冊Write函數(shù)?
Close=RegFn("CloseComm","I","I") &&注冊Close函數(shù)?
*[CDD19*2]?[CDD19*2][HJ1.6mm]?
*調用 Open 函數(shù)打開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函數(shù)撥號?
*[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函數(shù)結束傳輸?
*[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.結束語?
根據(jù)上述的設計思想,我們可以
實現(xiàn)基本的計算機遠程撥號通訊功能。文中所述在中文Wind ows 3.2環(huán)境下,用FoxPro for Windows 2.5b程序設計語言實現(xiàn)并通過。 ?
【FoxPro for Windows 遠程撥號通訊功能的設計與實現(xiàn)】相關文章:
用Windows終端仿真程序實現(xiàn)微機遠程文件傳送08-06
用Windows終端仿真程序實現(xiàn)微機遠程文件傳送108-06