VFP中常用WIN32API函數(shù)調(diào)用事例
發(fā)表時(shí)間:2023-08-07 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]我們?cè)赩FP編程時(shí),為了彌補(bǔ)VFP本身功能的不足,常常會(huì)用到WIN32API函數(shù) 來(lái)對(duì)VFP的功能行擴(kuò)展,例如取得系統(tǒng)信息、對(duì)注冊(cè)表進(jìn)行操作等,但是由于 WIN32API函數(shù)是C++的數(shù)據(jù)結(jié)構(gòu)形...
我們?cè)赩FP編程時(shí),為了彌補(bǔ)VFP本身功能的不足,常常會(huì)用到WIN32API函數(shù)
來(lái)對(duì)VFP的功能行擴(kuò)展,例如取得系統(tǒng)信息、對(duì)注冊(cè)表進(jìn)行操作等,但是由于
WIN32API函數(shù)是C++的數(shù)據(jù)結(jié)構(gòu)形式,在調(diào)用時(shí)與VFP的數(shù)據(jù)格式有所不同,因此在
調(diào)用時(shí)往往會(huì)產(chǎn)生問(wèn)題,而目前的一些資料所介紹的大都是VB、DELPHI等語(yǔ)言如
何調(diào)用,對(duì)VFP如何調(diào)用介紹的比較少,更缺少具體的調(diào)用事例,下面我分幾次
介紹在VFP如何調(diào)用WIN32API函數(shù),并就一些常用的WIN32API函數(shù)作一介紹,由于
本人水平有限,所介紹的內(nèi)容,僅供您參考,也歡迎您在我的[請(qǐng)您留言]中共同
探討:
.................一、VFP中調(diào)用WIN32API函數(shù)的格式
VFP中調(diào)用WIN32API函數(shù)的命令主要是:
DECLARE - DLL
CLEAR DLLS
1.DECLARE - DLL 它用于注冊(cè)外部 Windows 32 位動(dòng)態(tài)鏈接庫(kù) ( .DLL ) 中的
一個(gè)函數(shù)。
語(yǔ)法: DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName]
.......[cParamType1 [@] ParamName1, cParamType2 [@] ParamName2, ...]
說(shuō)明:
cFunctionType 指定該函數(shù)返回值的類(lèi)型,其類(lèi)型代碼如下:
SHORT16 位整數(shù)
INTEGER32 位整數(shù)
SINGLE 32 位浮點(diǎn)數(shù)
DOUBLE 64 位浮點(diǎn)數(shù)
STRING 字符串
FunctionName 指定要注冊(cè)使用的32位函數(shù)名。注意 FunctionName 區(qū)分大小寫(xiě)。
如果該函數(shù)名與Visual FoxPro的保留字相同,應(yīng)使用AS參數(shù)另起
別名。
IN LibraryName 指定該函數(shù)所在的外部動(dòng)態(tài)鏈接庫(kù)文件名,如果LibraryName為:
WIN32API時(shí),VFP將依次查找KERNEL32.DLL、GDI32.DLL、
USER32.DLL、MPR.DLL及ADVAPI32.DLL等動(dòng)態(tài)鏈接庫(kù)文件名。
AS AliasName 當(dāng)API函數(shù)的名稱(chēng)與Visual FoxPro的保留字相同時(shí),另取
AliasName別名,另取的別名是不區(qū)分大小寫(xiě)的。
cParameterType1 [@] ParamName1, cParameterType2 [@] ParamName2, ...
指定傳遞給被調(diào)用的32位.DLL函數(shù)的參數(shù)類(lèi)型及參數(shù)名稱(chēng)。其類(lèi)
型代碼如FunctionType,如果要以傳址方法傳遞參數(shù)則應(yīng)在參數(shù)
名前加上@。
2.CLEAR DLLS 釋放所有利用DECLARE - DLL命令所裝入的動(dòng)態(tài)鏈接庫(kù)。
....一旦申明WIN32API函數(shù)成功,就可以和一般函數(shù)一樣用 ?xxx()、=xxx()
來(lái)調(diào)用。
....下面以具體事例談?wù)剋in32api在Vfp中的運(yùn)用:
1.利用win32api函數(shù)獲取指定磁盤(pán)的卷標(biāo):
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命令所裝入的動(dòng)態(tài)鏈接庫(kù)。
xx<>0 獲取指定磁盤(pán)的卷標(biāo)成功,反之則未成功。
C_var=指定磁盤(pán)的卷標(biāo),是個(gè)十進(jìn)制的數(shù)值,與我們?cè)贒OS下看到的16進(jìn)制不同。
C_cd=系統(tǒng)規(guī)定的文件名每一部分的長(zhǎng)度,是個(gè)十進(jìn)制的數(shù)值。
C_qf=文件名的大小寫(xiě)標(biāo)志,是個(gè)十進(jìn)制的數(shù)值。
.....怎么樣很簡(jiǎn)單吧,我們可以把獲取的磁盤(pán)卷標(biāo),用來(lái)加密我們的軟件,這樣
我們的 軟件就具有防拷貝的功能了。