解决方案 »

  1.   

    声明 DLL 过程
    尽管 Visual Basic 在 Win32api.txt 中提供了大量的预定义声明,但还是需要知道如何亲自编写声明。例如,有时希望访问用其它语言编写的 DLL 中的过程,或者改写 Visual Basic 的预定义声明,以满足特殊需要。要声明一个 DLL 过程,需要在代码窗口的“声明”部分增加一个 Declare 语句。如果该过程返回一个值,应将其声明为 Function:Declare Function publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type如果过程没有返回值,可将其声明为 Sub:Declare Sub publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])]缺省情况下,在标准模块中声明的 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 子句指定文件的路径:Declare Function lzCopy Lib "c:\windows\lzexpand.dll" _
    (ByVal S As Integer,    ByVal D As Integer) As Long如果未指定 libname 的路径,Visual Basic 将按照下列顺序查找该文件: .exe 文件所在的目录
    当前目录
    Windows 位系统目录(通常为 \Windows\System)
    Windows 目录(不一定是 \Windows)
    Path 环境变量中的目录 将 C 语言声明转换为 Visual Basic 声明在文档中,通常使用 C 语言的语法描述 DLL 中的过程。要在 Visual Basic 中调用这些过程,需要将它们转换成合法的 Declare 语句,并使用正确的参数调用它们。在进行这种转换时,必须将 C 数据类型转换为 Visual Basic 的数据类型,并且说明每个参数是以使用值的 (ByVal) 方式,还是使用引用的 (ByRef)(缺省)方式。下表针对常用的 C 语言数据类型列出了与之等价的 Visual Basic 类型(用于 32 位版本的 Windows)。C 语言数据类型 在 Visual Basic 中声明为 调用时使用的表达式 
    ATOM ByVal variable As Integer 结果为 Integer 类型的表达式 
    BOOL ByVal variable As Long 结果为 Long 类型的表达式 
    BYTE ByVal variable As Byte 结果为 Byte 类型的表达式 
    CHAR ByVal variable As Byte 结果为 Byte 类型的表达式 
    COLORREF ByVal variable As Long 结果为 Long 类型的表达式 
    DWORD ByVal variable As Long 结果为 Long 类型的表达式 
    HWND, HDC, HMENU 等。(Windows 句柄) ByVal variable As Long 结果为 Long 类型的表达式 
    INT, UINT ByVal variable As Long 结果为 Long 类型的表达式 
    LONG ByVal variable As Long 结果为 Long 类型的表达式 
    LPARAM ByVal variable As Long 结果为 Long 类型的表达式 
    LPDWORD variable As Long 结果为 Long 类型的表达式 
    LPINT, LPUINT variable As Long 结果为 Long 类型的表达式 
    LPRECT variable As type 自定义类型的任意变量 
    LPSTR, LPCSTR ByVal variable As String 结果为 String 类型的表达式 
    LPVOID variable As Any 任何变量(在传递字符串的时候使用 ByVal) 
    LPWORD variable As Integer 结果为 Integer 类型的表达式 
    LRESULT ByVal variable As Long 结果为 Long 类型的表达式 
    NULL As Any 或
    ByVal variable As Long ByVal Nothing 或 ByVal 0& 或 vbNullString 
    SHORT ByVal variable As Integer 结果为 Integer 类型的表达式 
    VOID Sub procedure 不可用 
    WORD ByVal variable As Integer 结果为 Integer 类型的表达式 
    WPARAM ByVal variable As Long 结果为 Long 类型的表达式