NULLAsAny或ByValNothing或
ByValvariableAsLongByVal0&或VBNullString
SHORTByValvariableAsInteger结果为Integer类型的表达式
VOIDSubprocedure不可用
WORDByValvariableAsInteger结果为Integer类型的表达式
WPARAMByValvariableAsLong结果为Long类型的表达式
5、VB中进行32位动态库的声明时,函数名是大小写敏感的。在获得了需要的动态连接库之后,就可以在VB中进行调用了。但是,由于VB不能验证应用程序传递到动态连接库中的参数值是否正确,因此VB程序中大量的API调用可能会降低整个应用程序的稳定性,也会增加以后维护的难度。所以,决定在VB程序中直接调用API函数时要慎重,但适当的使用API调用确实能够有效地提高VB程序的性能。这之间的平衡需要编程人员根据实际情况来掌握。下面就具体介绍一下在VB中调用API函数时需要做的工作。
要声明一个DLL过程,首先需要在代码窗口的'通用(General)'部分增加一个Declare语句。如果该过程返回一个值,应将其声明为Function:
DeclareFunctionpublicnameLib'libname'[Alias'alias'][([[ByVal]variable[Astype][,[ByVal]variable[Astype]]。。。])]AsType
如果过程没有返回值,可将其声明为Sub:
DeclareSubpublicnameLib'libname'[Alias'alias'][([[ByVal]variable[Astype][,[ByVal]variable[Astype]]。。。])]
缺省情况下,在标准模块中声明的DLL过程,可以在应用程序的任何地方调用它。在其它类型的模块中定义的DLL过程则是模块私有的,必须在它们前面声明Private关键字,以示区分。下面分别介绍声明语句的各个组成部分。
(一)、指定动态库:
Declare语句中的Lib子句用来告诉VisualBasic如何找到包含过程的。dll文件。如果引用的过程属于Windows核心库(User32、Kernel32或GDI32),则可以不包含文件扩展名,如:
DeclareFunctionGetTickCountLib'kernel32'Alias'GetTickCount'()AsLong
对于其它动态连接库,可以在Lib子句指定文件的路径:
DeclareFunctionlzCopyLib'c:\windows\lzexpand。dll'_
(ByValSAsInteger,ByValDAsInteger)AsLong
如果未指定libname的路径,VisualBasic将按照下列顺序查找该文件:
①。exe文件所在的目录
②当前目录
③Windows系统目录
④Windows目录
⑤Path环境变量中的目录
下表中列出了常用的操作系统环境库文件。
动态链接库描述
Advapi32。dll高级API服务,支持大量的API(其中包括许多安全与注册方面的调用)
Comdlg32。dll通用对话框API库
Gdi32。dll图形设备接口API库
Kernel32。dllWindows32位核心的API支持
Lz32。dll32位压缩例程
Mpr。dll多接口路由器库
Netapi32。dll32位网络API库
Shell32。dll32位ShellAPI库
User32。dll用户接口例程库
Version。dll版本库
Winmm。dllWindows多媒体库
Winspool。drv后台打印接口,包含后台打印API调用。
对于Windows的系统API函数,可以利用VB提供的工具APIViewer查找某一函数及其相关数据结构和常数的声明,并复制到自己的程序中。
(二)、使用别名:
Declare语句中的Alias子句是一个可选的部分,用户可以通过它所标识的别名对动态库中的函数进行引用。例如,在下面的语句中,声明了一个在VB中名为MyFunction的函数,而它在动态库Mydll。dll中最初的名字是MyFunctionX。
PrivateDeclareFunctionMyFunctionLib'Mydll。dll'_
Alias'MyFunctionX'()AsLong
需要注意的是,Alias子句中的函数名是大小写敏感的,也就是说,必须与函数在生成时的声明(如在C源文件中的声明)一致。这是因为32位动态库与16位动态库不同,其中的函数名是区分大小写的。同样道理,如果没有使用Alias子句,那么在Function(或Sub)后的函数名也是区分大小写的。
通常在以下几种情况时需要使用Alias子句:
A。处理使用字符串的系统WindowsAPI过程
如果调用的系统WindowsAPI过程要使用字符串,那么声明语句中必须增加一个Alias子句,以指定正确的字符集。包含字符串的系统WindowsAPI函数实际有两种格式:ANSI和Unicode(关于ANSI和Unicode两种字符集的区别将在后面详细阐述)。因此,在Windows头文件中,每个包含字符串的函数都同时有ANSI版本和Unicode版本。例如,下面是SetWindowText函数的两种C语言描述。可以看到,第一个描述将函数定义为SetWindowTextA,尾部的'A'表明它是一个ANSI函数:
WINUSERAPIBOOLWINAPISetWindowTextA(HWNDhWnd,LPCSTRlpString);
第二个描述将它定义为SetWindowTextW,尾部的'W'表明它是一个Unicode函数: