顶点 | |||||||||||||||
DLL是一个位于应用程序外部的过程库,它可以从应用程序中调用。在运行时被连接,但并不绑定到EXE文件上。DLL是可共享和重入的,它的代码执行速度VisualBasic比代码快。 Windows操作系统在DLL中提供了丰富的过程集,可以通过调用这些过程扩展VisualBasic的功能。也可以调用第三方或你自己开发的DLL库。 绝大多数DLL是用C语言编写,在使用VisualBasic调用时有许多值得注意的事项。 | |||||||||||||||
顶点 | |||||||||||||||
系统DLL是指Windows操作系统提供的三个DLL库,对于不同版本的Windows其库名和内容不同。 | |||||||||||||||
16位Windows 由Windows3.X和Windows95、WindowsNT的16位层提供库为:USE,GDI,KERNEL | |||||||||||||||
32位Windows 由Windows95、WindowsNT提供库名为:USER32,GDI32,KERNEL32 | |||||||||||||||
顶点 | |||||||||||||||
DLL过程必须声明在标准模块中,它缺省为公有过程。 | |||||||||||||||
声明: | |||||||||||||||
格式: | |||||||||||||||
Declare Sub 过程名 Lib "库名" [Alias "别名"][(参数表)] Declare Function 函数名 Lib "库名" [Alias "别名"][(参数表)] As 类型 | |||||||||||||||
说明: | |||||||||||||||
过程名、函数名: 是你定义的名字以便在程序中引用库名: 对于系统DLL为三个系统库名。“User32”、“GDI32”、“Kernel32” 对于第三方DLL为文件名。如:“C:/.../MyDll.DLL” | |||||||||||||||
别名:当你定义的过程名和函数名与DLL库中所提供的过程名函数名不同时,必须把别名定义为DLL库中所提供的过程名函数名。 | |||||||||||||||
调用: | |||||||||||||||
和调用VisualBasic过程一样。 | |||||||||||||||
顶点 | |||||||||||||||
VisualBasic5.0/6.0提供了一个小工具使我们可以方便的在程序中声明系统DLL过程。 | |||||||||||||||
顶点 | |||||||||||||||
绝大多数DLL是用C语言编写的,在数据类型上与VB有较大的不同。
| |||||||||||||||
顶点 | |||||||||||||||
值传递: | |||||||||||||||
当通过值传递一个参数时,将参数的值的拷贝传递给过程。如果在过程中改变了参数的值,它不会影响原始变量。 | |||||||||||||||
引用传递(VB缺省): | |||||||||||||||
当通过引用传递一个参数时,将参数的地址传递给过程。如果在过程中改变了参数的值,原始变量的值也被修改。 | |||||||||||||||
例: 在文件C:/MyDll.dll中有一个过程: vold P(int x,int*y) { x=20; y=30; } 的VB中声明 Declare Sub P Lib "C:/MyDll.dll" (ByVal x As Long,ByDef y As Long) 在VB中引用 Dim x As Long Dim y As Long x=100 y=100 P(x,y) 这时 x=100,y=30 | |||||||||||||||
顶点 | |||||||||||||||
在C语言中字符串变量实际上是一个地址。所以在VB中即使声明一个字符串变量值传递,也会把地址传给DLL过程,即:源变量的值会随着DLL过程中的对应参数改变而改变。 在C语言中空字符串用NULL,即0来表示。在VB中则不能把0作为传给一个String类型的参数,需要使用vbNullString常量来表示空字符串。 例: hWnd=FindWindow(vbNullString,"Microsoft Word") FindWindow是系统DLL的一个过程。 |