1,486
社区成员
发帖
与我相关
我的任务
分享
' 第1个: API函数声明
Private Declare Function OpenSDK_AllocSession Lib "XXX.dll" (ByVal pHandle As Long, _
ByRef pUser As Any, _
ByRef pSession As Long, _
ByRef iSessionLen As Long, _
Optional ByVal bSync As Boolean = False, _
Optional ByVal iTimeOut As Long = &HEA60&) As Long
' 参数说明:
' pHandle 你的“回调函数”地址,使用时传入: AddressOf OpenSDK_MessageHandler
' pUser 你要向“回调函数”传递的信息数据,可以是任意的(按你的需要定义)“自定义类型”,
' 也可以是VB6中“标准”的数据类型。如果不需要传数据,可传递 ByVal 0& 。
' pSession 指向一个“字符串数据”,估计是ANSI格式编码的,用CopyMemory( )把数据拷贝到一个字
' 节数组中,再用 StrConv( ) 函数转换成UTF16编码字符串就行了。
' iSessionLen 从上一个参数(pSession)指向的内存地址,字符数据有多少字节。
' bSync 略
' iTimeOut “同步操作”的“超时”参数,时间单位是毫秒。默认值为6万毫秒(1分钟)。
' 第2个: 你自己要实现的“回调函数”,必须写在某“标准模块”中
Public Sub OpenSDK_MessageHandler(ByVal szSessionId As Long, ByVal iMsgType As Long, _
ByVal iErrorCode As Long, ByVal pMessageInfo As Long, _
ByVal pUser As Long)
' 参数说明:
' szSessionId 见上面的 pSession ,只是这儿没有“数据长度”数据,可按 SessionId格式,选取一个
' “最大长度”的字节数组,用CopyMemory( )把数据拷贝出来,转换成字符串后,
' 找“vbNullChar”的位置,从那儿截断。
' pUser VB6中“自己的函数”参数类型不能是 Any 。如果是Long类型的一个值,可以直接使用,
' 如果是其它类型(包括自定义数据类型),可定义一个相应类型的变量,然后用
' CopyMemory( )把pUser指向的数据拷贝到相应的变量中,拷贝长度就是变量数据
' 类型的字节数。如果是“自定义类型”、并且成员中包含动态数组、字符串类型
' 的成员,在使用后最好用ZeroMemory() 把这个变量“清空”,还有:对字符串成
' 员最好不要赋以新值、动态数组不要重定义大小(元素不是字符串时可改变值)。
' 如果“不需要”,直接忽略这个参数就行了。
'
' 这个函数(回调过程)的其它参数没必要再多说了。
'
End Sub