请问如何调用API

jllemon 2010-10-12 10:43:00


如何用VFP调用API并应用呢?网上的一些资料讲的不是很详细,


希望能结合例子详细点。

谢谢。
...全文
73 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jllemon 2010-10-12
  • 打赏
  • 举报
回复


谢谢!
jllemon 2010-10-12
  • 打赏
  • 举报
回复
非常感谢,谢谢!
十豆三 2010-10-12
  • 打赏
  • 举报
回复
例如上面的例子也可以这样,即用声明成另一个别名:

Clear
Declare Integer GetActiveWindow In WIN32API As MyGetActiveWindow
Wait Window "现在您可以切换到另一个应用程序了" Timeout 5
? MyGetActiveWindow( )
十豆三 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jllemon 的回复:]
DLL 函数名可以与 Win32 API 手册中规定的不同。例如,MessageBox 函数应该命名为 MessageBoxA (对于单字节字符)和 MessageBoxW (对于 UNICODE)。如果 Visual FoxPro 不能定位 FunctionName 指定的 DLL 函数,则将字母 A 追加到函数名尾部,并且 Visual FoxPro 用新的函数名重新搜索。


这段……
[/Quote]

可以声明为 别名。
jllemon 2010-10-12
  • 打赏
  • 举报
回复
DLL 函数名可以与 Win32 API 手册中规定的不同。例如,MessageBox 函数应该命名为 MessageBoxA (对于单字节字符)和 MessageBoxW (对于 UNICODE)。如果 Visual FoxPro 不能定位 FunctionName 指定的 DLL 函数,则将字母 A 追加到函数名尾部,并且 Visual FoxPro 用新的函数名重新搜索。


这段话有个疑问,DLL函数从WIN32 API中调用,函数名应该与WIN32 API中函数名相同,不同步是找不到无法调用吗?

jllemon 2010-10-12
  • 打赏
  • 举报
回复
感谢感谢!

十豆三 2010-10-12
  • 打赏
  • 举报
回复
来自 VFP 自带帮助文件
DECLARE - DLL 命令

注册一个外部共享库中的函数。库是 32-位动态链接库文件(.DLL)。


DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName]
[cParamType1 [@] ParamName1, cParamType2 [@] ParamName2, ...]


参数
cFunctionType
如果有返回值,则表明共享库返回值的数据类型。如果函数没有返回值,则省略 cFunctionType。
cFunctionType 可以是以下值: cFunctionType 说明
SHORT 16-位 整数

INTEGER 32-位 整数

SINGLE 32-位 浮点数

DOUBLE 64-位 浮点数

LONG 32-位 长整数

STRING 字符串

OBJECT IDispatch 对象类型 *NEW


FunctionName
指定 Visual FoxPro 中要注册的共享库函数名。该参数中传递的函数名要求区分大小写。注意:
DLL 函数名可以与 Win32 API 手册中规定的不同。例如,MessageBox 函数应该命名为 MessageBoxA (对于单字节字符)和 MessageBoxW (对于 UNICODE)。如果 Visual FoxPro 不能定位 FunctionName 指定的 DLL 函数,则将字母 A 追加到函数名尾部,并且 Visual FoxPro 用新的函数名重新搜索。
 
如果指定的共享库函数与一个 Visual FoxPro 函数同名,或函数名不是一个合法的 Visual FoxPro 名,当注册此函数时,将用 AS 子句分配一个别名,这点在后面将要说明。也可以用 OBJECT 作为一个返回值,例如"DECLARE OBJECT myfunc IN some DLL ..." 虽然 COM 通常没有任何这种格式的 API 。例如:  DECLARE INTEGER AccessibleObjectFromWindow IN oleacc.dll ;
integer, integer, string , object @


IN LibraryName
指定外部共享库名,其中包含用 FunctionName 指定的函数。如果为 LibraryName 指定 WIN32API,则 Visual FoxPro 在Kernel32.dll, Gdi32.dll, User32.dll, Mpr.dll, 和 Advapi32.dll 中搜索 32-位 Windows .dll 函数。
AS AliasName
为一个与 Visual FoxPro 函数同名或不合法的共享库函数名,指定一个别名。AliasName 不能是 Visual FoxPro 保留字或已经由 Visual FoxPro 注册的共享库函数名。如果给函数指定了别名,可以用别名调用共享库函数。AliasName 不区分大小写。
cParameterType1[@] ParamName1, cParameterType2[@] ParamName2, ...
指定传递给共享库函数的参数类型。共享库函数由 cParameterType 指定需要的参数类型。cParameterType 可以为以下某一类型: cParameterType 说明
INTEGER 32-位 整数

SINGLE 32-位 浮点数

DOUBLE 64-位 浮点数

LONG 32-位 长整数

STRING 字符串

如果参数不是共享库中的函数所希望的类型,Visual FoxPro 产生一条错误。Null 值可以传递一个空的字符串。调用函数时,若按引用传递一个参数,必须在这条命令的参数 cParameterType 后面、调用函数相应变量的前面,包含(@)标记。 如果在 DECLARE 中或在调用函数中没有包含 @,参数就按值传递。有关需要按引用传递参数的共享库函数的详细内容,请参见您的操作系统或环境的程序员指南(例如,为了获得传递参数到Windows DLL 时的信息,可翻阅 Microsoft Win32 程序员指南)。注意:
参数名 ParamName1, ParamName2, 等等是可选的,Visual FoxPro 或共享库函数并不使用它们。可以包含它们作为函数接收的参数名和参数类型的提示。
 

说明
在 Visual FoxPro 中调用一个共享库函数前,必须发出带有函数名、包含该函数的共享库名以及函数将要接收的参数类型的 DECLARE 命令。

为了提供向后兼容性,Visual FoxPro 仍然支持使用 SET LIBRARY 命令调用外部 API 库。(使用 SET LIBRARY,您可以访问 Foxtools.fll 中的函数。)但是,使用 DECLARE 是注册共享库函数的首选方法。

虽然 Visual FoxPro 添加了 OBJECT cFunctionType 到这个命令,但其主要是用于支持一些 ActiveX Accessibility API 例程,一般可以用于其它 Windows API 例程中。

有关调用共享库函数的更多信息,请参见您的操作系统或环境的程序员指南(例如,为了获得调用 DLL 的信息,可翻阅 Microsoft Win32 程序员指南)。

执行 DISPLAY STATUS 或 LIST STATUS 可显示已注册的函数名。执行 CLEAR ALL 或 CLEAR DLLS 可从内存中删除已注册的函数。

示例
这个示例用来为 Visual FoxPro 返回当前活动的 Windows 窗口句柄,或者如果您切换到其它 Windows 应用程序返回 0 。当显示 WAIT 窗口时,可在 5 秒内按下 ALT+TAB ,来切换到不同的 Windows 应用程序,或您可以作为活动的应用程序离开 Visual FoxPro。

CLEAR
DECLARE INTEGER GetActiveWindow IN win32api
WAIT WINDOW "现在您可以切换到另一个应用程序了" TIMEOUT 5
? GetActiveWindow( )

本次更新内容主要是BUG修复和功能改进,相隔4个月又发布了新版本,这次更新更像是例行公事,不过好在修复了很多BUG,另外需要说一下,EasyUI框架当中其实官方还隐藏了不少API没有开放出来,有些朋友建议我把整理一下,将一些好用的API及其用法也更新到中文API中,这里我想说的是,有些API或许是因为不稳定、尚有BUG、未完全实现或者是未经过完整测试的,所以官方并未公布出来,因此我也不建议大家大面积的去使用,这样会带来很多不稳定因素,甚至是致命的BUG,这也是我没有将这些API写入中文API文档的原因,所以有能力并且需要的人就自行去源代码中挖掘吧,我这里只同步官网的API(外加少许的变动或者不影响稳定性和安全性的新增内容)。 jQuery EasyUI 1.4.4版本更新内容: Bug(修复) filebox:修复“clear”和“reset”方法在IE9下无法正常工作的问题; messager:修复调用无参的$.messager.progress()方法之后,再调用$.messager.progress('close')方法时无法正常工作的问题; timespinner:修复在IE8中点击微调按钮时无法正确显示值的问题; window:修复在“onMove”事件中调用“options”方法时无法正常显示的问题; treegrid:修复“getLevel”方法无法接受为0的参数值的问题。 Improvement(改进) layout:改进后的“collapsedContent”、“expandMode”和“hideExpandTool”属性可以支持区域面板; layout:改进后的“hideCollapsedContent”属性可以在折叠面板上设置显示垂直标题栏; layout:新增“onCollapse”、“onExpand”、“onAdd”、“onRemove”事件; datagrid:在排序列的标题上显示↑↓图标; datagrid:新增“gotoPage”方法; propertygrid:新增“groups”方法,以允许获取所有数据租; messager:在显示长消息的的时候支持对消息进行自动滚动; tabs:“disabled”属性支持定义一个被禁用的选项卡面板; tabs:支持百分比大小。

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧