API说到底就是一系列的底层函数,是系统提供给用户用于进入操作系统核心,进行高级编程的途径。通过在Visual Basic应用程序中声明外部过程就能够访问Windows API(以及其它的外部DLLs)。在声明了过程之后,调用它的方法与调用Visual Basic自己的过程相同。要声明一个DLL过程,需要在代码窗口的"声明"部分增加一个Declare语句,如果该过程返回一个值,应将其声明为Function。例如:
Declare Function publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type
如果过程没有返回值,可将其声明为Sub。缺省情况下,在标准模块中声明的DLL过程,可以在应用程序的任何地方调用它。在其他类型的模块中定义的DLL过程是模块私有的,必须在它们前面 加上Private关键字,以示区分。特别提请注意的是,在32位的Visual Basic中过程名是区分大小写的。而在以前的16位版本中并不区分大小写,这是初学者容易出错的地方。Declare语句中的Lib子句用来告诉Visual Basic如何找到包含该过程的dll文件。如果引用的过程属于Windows核心库(User32、Kernel32或 GDI32),则可以不包含文件扩展名。例如:
Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount"() As Long。对于其它DLL, Lib子句须指定文件的路径及扩展名。如果调用的Windows API过程要使用字符串,那么在声明语句中必须增加一个Alias子句,以指定 正确的字符集。包含字符串的Windows API函数实 际有两种格武ANSI格式Unicode格式。因此,在 Windows头文件中,每个包含字符串的函数都同时有ANSI版本和Unicode版本。
例如,下面是SetWindowText函数的两种C语言描述。
可以看到,第一个描述将函数定义为SetWindowTextA, 尾部的"A"表明它是一个ANSI函数:
SetWindowTextA(HWND hWnd,LPCSTR lpString);
第二个描述将它定义为SetWindowTextW,尾部的 "w"表明它是一个Unicode函数:
SetWindowTextW(HWND Hwnd,LPCWSTR lpString);
因为两个函数实际的名称都不是"SetWindow Text",要引用正确的函数就必须增加一个Alias子句:
Private Declare Function SetwindowText Lib "user32" Alias "SetWindowTextA"(ByVal hwnd As Longg,ByVal lpString As String) As Long
请注意, Alias子句后面的字符串必须是过程的真正名称,必须是区分大小写的。事实上,您只需要记住,只有Windows NT才支持Unicode格式,而 Windows 95只支持ANSI格式就行了。至于两者的区别,作一般的应用程序开发是不需要了解的。
VB5专业版在VB目录的\Winapi子目录下,用几个文件提供了关于API的信息。 Win32api.txt文件中 包含了32位Windows API函数中用到的函数和类型的 结构声明以及全局常量的值。用户可以用VB本身带的外接程序"API浏览器"来方便地使用win32api.Txt,如下所示:
点击菜单文件项的"加载文本文件…"从VB目 录下的WINAPI目录中选择"WIN32API.TXT",就可以 查看WINDOWS 95系统的API函数的声明、常数定义和 数据类型了。例如,我们打算查看函数InverRect() 的声明。首先,点击"搜索"按钮,输入字符串 "InverRect"。在"可选项"栏中,兰色的亮度条将移 动到"InverRect"项上。再点按"添加"按钮,在"选 定项"中就出现"InverRect"在Visual Basic中的 声明了。接下来自然是点按"复制"按钮,然后将窗口切换到Visual Basic开发环境中,在需要声明API 函数的地方Ctrl+V(粘贴)即可。
上面所讲的声明方法虽然简单,但只有使用WINDOWS本身的API函数才能这样。对于第三方提供的动态链接库(DLL)您只有用键盘老老实实地敲了。