我們在VFP編程時,為了彌補VFP本身功能的不足,常常會用到WIN32API函數 來對VFP的功能行擴展,例如取得系統信息、對注冊表進行操作等,但是由于 WIN32API函數是C++的數據結構形式,在調用時與VFP的數據格式有所不同,因此在 調用時往往會產生問題,而目前的一些資料所介紹的大都是VB、DELPHI等語言如 何調用,對VFP如何調用介紹的比較少,更缺少具體的調用事例,下面我分幾次 介紹在VFP如何調用WIN32API函數,并就一些常用的WIN32API函數作一介紹,由于 本人水平有限,所介紹的內容,僅供您參考,也歡迎您在我的[請您留言]中共同 探討:
.................一、VFP中調用WIN32API函數的格式
VFP中調用WIN32API函數的命令主要是: DECLARE - DLL CLEAR DLLS 1.DECLARE - DLL 它用于注冊外部 Windows 32 位動態鏈接庫 ( .DLL ) 中的 一個函數。 語法: DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName] .......[cParamType1 [@] ParamName1, cParamType2 [@] ParamName2, ...] 說明: cFunctionType 指定該函數返回值的類型,其類型代碼如下: SHORT16 位整數 INTEGER32 位整數 SINGLE 32 位浮點數 DOUBLE 64 位浮點數 STRING 字符串 FunctionName 指定要注冊使用的32位函數名。注意 FunctionName 區分大小寫。 如果該函數名與Visual FoxPro的保留字相同,應使用AS參數另起 別名。 IN LibraryName 指定該函數所在的外部動態鏈接庫文件名,如果LibraryName為: WIN32API時,VFP將依次查找KERNEL32.DLL、GDI32.DLL、 USER32.DLL、MPR.DLL及ADVAPI32.DLL等動態鏈接庫文件名。 AS AliasName 當API函數的名稱與Visual FoxPro的保留字相同時,另取 AliasName別名,另取的別名是不區分大小寫的。 cParameterType1 [@] ParamName1, cParameterType2 [@] ParamName2, ... 指定傳遞給被調用的32位.DLL函數的參數類型及參數名稱。其類 型代碼如FunctionType,如果要以傳址方法傳遞參數則應在參數 名前加上@。
2.CLEAR DLLS 釋放所有利用DECLARE - DLL命令所裝入的動態鏈接庫。
....一旦申明WIN32API函數成功,就可以和一般函數一樣用 ?xxx()、=xxx() 來調用。 ....下面以具體事例談談win32api在Vfp中的運用:
1.利用win32api函數獲取指定磁盤的卷標:
Stor 0 to C_var,C_cd,C_qf C_Var='c:\' DECLARE INTEGER GetVolumeInformation IN Win32API STRING @, STRING @, INTEGER,; INTEGER @, INTEGER @, INTEGER @, STRING @, INTEGER xx=GetVolumeInformation(C_Var,"",20,@C_var,@C_cd,@C_qf,0,0) CLEAR DLLS &&釋放所有利用DECLARE - DLL命令所裝入的動態鏈接庫。 xx<>0 獲取指定磁盤的卷標成功,反之則未成功。 C_var=指定磁盤的卷標,是個十進制的數值,與我們在DOS下看到的16進制不同。 C_cd=系統規定的文件名每一部分的長度,是個十進制的數值。 C_qf=文件名的大小寫標志,是個十進制的數值。
.....怎么樣很簡單吧,我們可以把獲取的磁盤卷標,用來加密我們的軟件,這樣 我們的 軟件就具有防拷貝的功能了。
|