VB6.0对动态库的调用
在VB6.0中,需要首先对DLL中的函数进行声明,然后才能对该函数进行调用。关于如何声明DLL中的函数,请参考VB中的HELP文件"Declare statement"。
下面,通过举例来说明。当SWIND.dll 中有新的函数未能包含在VB声明文件SWIND.bas中时,你可以参考该函数在C语言中的声明,自己来声明VB下的函数调用。
例如:
在SWIND.h中的函数
int WINAPI SW_CheckOffHook(int nIndex)
在SWIND.bas中声明为
Declare Function SW_CheckOffHook Lib "SWIND.dll" (ByVal nIndex As Integer) As Integer
要注意的一点是,所有参数和返回值的字节长度要相等。
VB编程的注意事项
由于VB是解释型的编程语言,它在设计时有一些不同的出发点,因此,在使用VB调用DLL时,有一些事项应引起注意。
如果在C语言中某函数的参数为字符串,并且在函数调用完毕后,有内容通过该参数返回,当VB使用该函数时,带入的变量必须是已经分配空间的。
例如:
Dim MsgStr As String * 200
SWIND.BAS中的声明如下:
Declare Function SW_Init Lib "SWIND.dll" () As Integer
Declare Function SW_Free Lib "SWIND.dll" () As Integer
Declare Function SW_SetType Lib "swind.dll" (ByVal DeviceType As Integer) As Integer
Declare Function SW_GetCount Lib "SWIND.dll" () As Integer
Declare Function SW_GetSN Lib "swind.dll" (ByVal nIndex As Integer) As Integer
Declare Function SW_CheckOffHook Lib "SWIND.dll" (ByVal nIndex As Integer) As Integer
Declare Function SW_CheckDisconnect Lib "swind.dll" (ByVal nIndex As Integer) As
Integer
Declare Function SW_CheckRing Lib "swind.dll" (ByVal nIndex As Integer) As
Integer
Declare Function SW_ReceiveDTMF Lib "SWIND.dll" (ByVal nIndex As Integer, ByVal lpBuf
As String) As Integer
Declare Function SW_ReceiveCID Lib "SWIND.dll" (ByVal nIndex As Integer, ByVal lpBuf
As String) As Integer
Declare Function SW_StartFileRecord Lib "SWIND.dll" (ByVal nIndex As Integer, ByVal
FileName As String, ByVal FileLength As Long) As Integer
Declare Function SW_CheckSilence Lib "SWIND.dll" (ByVal nIndex As Integer) As Integer
Declare Function SW_StopFileRecord Lib "SWIND.dll" (ByVal nIndex As Integer) As Integer
Declare Function SW_CheckFileRecordEnd Lib "SWIND.dll" (ByVal nIndex As Integer) As
Long