Result = DJ.AcsOpenStream(AcsHander, g_serverID.m_s32Ptr, 1, 32, 32, 0, mData2)
第2个参数在OCX里定义的是一个指针结构体,翻译到VB里如下
Public Type ServerID_t
m_s8ServerIp(27) As Byte
m_u32ServerPort As Integer
m_s8UserName(31) As Byte
m_s8UserPwd(31) As Byte
End Type现在要传这个结构体到VB里,该怎么传?Function AcsOpenStream(acsHandle As Long, serverID As Long, u8AppID As Integer, u32SendQSize As Long, u32RecvQSize As Long, s32DebugOn As Long, privateData As Long) As Long
这个是函数原型
第2个参数在OCX里定义的是一个指针结构体,翻译到VB里如下
Public Type ServerID_t
m_s8ServerIp(27) As Byte
m_u32ServerPort As Integer
m_s8UserName(31) As Byte
m_s8UserPwd(31) As Byte
End Type现在要传这个结构体到VB里,该怎么传?Function AcsOpenStream(acsHandle As Long, serverID As Long, u8AppID As Integer, u32SendQSize As Long, u32RecvQSize As Long, s32DebugOn As Long, privateData As Long) As Long
这个是函数原型
而不是ServerID_t类型
你试试用VarPtr()函数获得ServerID_t内存指针,再传给函数试试
VarPtr()函数VB自带,不过VB不推荐使用指针,所以隐藏掉了
m_s8ServerIp(27) As Byte
m_u32ServerPort As Integer
m_s8UserName(31) As Byte
m_s8UserPwd(31) As Byte
End Type Function AcsOpenStream(acsHandle As Long,ByVal serverID As Long, u8AppID As Integer, u32SendQSize As Long, u32RecvQSize As Long, s32DebugOn As Long, privateData As Long) As Long
'如果是指针,就要用ByVal.其它的参数不知道你是不是要用于输出的,所以就没改,自己看API说明.'调用时,这样:dim sID as serverid_t '定义一个这种自定义类型的变量AcsOpenStream AcsHander, VarPtr(sID), 1, 32, 32, 0, mData2
'使用VarPtr将这个变量的地址取到,是一个LONG值,传入到API里面就行了.
'如果是指针,就要用ByVal.其它的参数不知道你是不是要用于输出的,所以就没改,自己看API说明.这个函数原型不是VB定义的,是OCX里定义好的,不能改的AcsOpenStream AcsHander, VarPtr(sID), 1, 32, 32, 0, mData2
'使用VarPtr将这个变量的地址取到,是一个LONG值,传入到API里面就行了.我是这么调用的,但是出错,楼上的大哥,我的QQ是:32416070,希望和你探讨下这个问题
Function AcsOpenStream(acsHandle As Long,ByVal serverID As Long, u8AppID As Integer, u32SendQSize As Long, u32RecvQSize As Long, s32DebugOn As Long, privateData As Long) As Long
'如果是指针,就要用ByVal.其它的参数不知道你是不是要用于输出的,所以就没改,自己看API说明. 这个函数原型不是VB定义的,是OCX里定义好的,不能改的
AcsOpenStream AcsHander, VarPtr(sID), 1, 32, 32, 0, mData2
'使用VarPtr将这个变量的地址取到,是一个LONG值,传入到API里面就行了. 我是这么调用的,但是出错, 楼上的大哥,我的QQ是:32416070,希望和你探讨下这个问题
==================================================== 楼主试一下这样调用可以不:
AcsOpenStream AcsHander, ByVal VarPtr(sID), 1, 32, 32, 0, mData2