VFP中常用WIN32API函数调用事例
我们在编写VFP的时候,为了弥补VFP自身功能的不足,经常会使用WIN32API函数来扩展VFP的函数行,比如获取系统信息、操作注册表等。但是由于WIN32API函数是C++的数据结构形式,调用时VFP的数据格式不一样,所以调用时经常出现问题。目前一些资料大多是关于如何调用VB、DELPHI等语言,而关于如何调用VFP的例子很少。在这里,我将介绍在VFP如何多次调用WIN32API函数,并介绍一些常用的WIN32API函数。由于本人水平有限,介绍的内容仅供大家参考,也欢迎大家在我的【请留言】中讨论:
一、在VFP调用WIN32API函数的格式
在VFP调用WIN32API函数的命令主要有:
声明- DLL
清除DLLS
1.DECLARE-DLL它用于在外部Windows 32位动态链接库中注册一个函数(。DLL)。
语法:在库名[as aliasname]中声明[cfunctiontype]函数名
.......[cParamType1 [@] ParamName1,cParamType2 [@] ParamName2,...]
描述:
CFunctionType指定该函数返回值的类型,其类型代码如下:
SHORT16-bit整数
INTEGER32-bit整数
SINGLE 32位浮点数
DOUBLE 64位浮点数
线
FunctionName指定要注册的32位函数的名称。请注意,FunctionName区分大小写。
如果此函数的名称与Visual FoxPro的保留字相同,则应使用AS参数重命名。
IN LibraryName指定该函数所在的外部动态链接库的文件名。如果库名为:
WIN32API,GDI32.DLL的VFP将寻找KERNEL32.DLL,
USER32.DLL、MPR.DLL和ADVAPI32.DLL等动态链接库的文件名。
Aliassname当API函数名与Visual FoxPro的保留字相同时,采用另一个别名Aliassname,不区分大小写。
cParameterType1 [@] ParamName1,cParameterType2 [@] ParamName2,...
传递给被调用的32位的参数的类型和名称。DLL函数。它的类代码类似于FunctionType。如果要通过引用方法传递参数,应该在参数名前加上@。
2.清除DLLS释放所有由DECLARE-DLL命令加载的动态链接库。
......WIN32API函数一旦声明成功,就可以作为通用函数使用?Xxx(),=xxx()来调用。
....下面用一个具体的例子来谈谈win32api在Vfp中的应用:
1.使用win32api函数获取指定磁盘的卷标:
Stor 0到C_var,C_cd,C_qf
C_Var='c:\ '
在Win32API STRING @中声明整数GetVolumeInformation,STRING @,INTEGER,;
整数@,整数@,整数@,字符串@,整数
xx=GetVolumeInformation(C_Var,"",20,@C_var,@C_cd,@C_qf,0,0)
Clearls & &释放所有由DECLARE-DLL命令加载的动态链接库。
XXX0成功获取指定磁盘的卷标,否则失败。
C_var=指定磁盘的卷标,是一个十进制值,和我们在DOS中看到的十六进制值不同。
C_cd=系统指定的文件名各部分的长度,为十进制值。
C_qf=文件名的大小写标志,为十进制值。
有多简单?我们可以利用获得的磁盘卷标对我们的软件进行加密,使我们的软件具有防拷贝的功能。
0条评论