当前位置: 代码迷 >> VFP >> Declare INTEGER 命令和shellexecute函数解决方案
  详细解决方案

Declare INTEGER 命令和shellexecute函数解决方案

热度:2489   发布时间:2013-02-26 00:00:00.0
Declare INTEGER 命令和shellexecute函数
Declare   INTEGER   mciSendString   IN   winmm.DLL   STRING   ,STRING   @,INTEGER   ,INTEGER  
=mcisendstring( "open   "+cmusicname+ "   alias   sound ",@BUFFER,80,0)
=mcisendstring( "play   sound   from   0 ",@BUFFER,80,0)

i= "http:// "+allt(thisform.text1.value)
DECLARE   INTEGER   ShellExecute   IN   SHELL32.DLL   INTEGER   ,STRING   ,STRING   ,STRING   ,STRING   ,INTEGER  
return   shellexecute(0, "open ",i, " ", " ",1)

DECLARE这个是怎用的?不明的说明书都唔清楚啊~!~~
shellexecute(0, "open ",i, " ", " ",1)这是什么函数?请锡教~~~~!

------解决方案--------------------------------------------------------
注册一个外部共享库中的函数。库是 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。
  相关解决方案