VB调用DLL的问题
原型:
int WINAPI GetDeliverSMExExEx(ULONG* sm_ID, unsigned char* DestTON, unsigned char* DestNPI, char* DestAddr, unsigned char* OrgTON, unsigned char* OrgNPI, char* OrgAddr, unsigned char* PRI, unsigned char* RP, unsigned char* UDHI, unsigned char* PID, unsigned char* DCS, char* TimeStamp, unsigned long * UDLen, char* UserData, unsigned char* StatusReport,unsigned char* sMsgID, char* sSubmitdate, char* sDonedate, char* sStatus);
【参数说明】
Sm_ID 类型:ULONG*
意义:返回短消息的ID
DestTON 类型:unsigned char*
意义:返回目标地址号码类型
DestNPI 类型:unsigned char*
意义;返回目标地址编码方案
DestAddr 类型:char* 返回最大长度为20的字符串(不包括"\0"字符)。
意义:目标地址
OrgTON 类型:unsigned char*
说明:返回源地址号码类型
OrgNPI 类型:unsigned char*
说明:返回源地址编码方案
OrgAddr 类型:char* 返回最大长度为20的字符串(不包括"\0"字符)。
说明:源地址
PRI 类型:unsigned char*
说明:返回优先级
RP 类型:unsigned char*
说明:返回回应路径
UDHI 类型:unsigned char*
说明:返回头结构指示
PID 类型:unsigned char*
说明:返回协议标志
DCS 类型:unsigned char*
说明:返回编码方案
TimeStamp 类型:char* 返回最大长度为19的字符串(不包括"\0"字符)。
说明:提交时间
UDLen 类型:ULONG*
意义:返回短消息的UDL
UserData 类型:char* 返回最大长度为140字节的字符串(不包括"\0"字符)。
说明:正文(为状态报告时无意义)
StatusReport 类型:unsigned char*
返回:状态报告标志,0:表示不是状态报告,
1:表示为状态报告
sMsgID 类型:unsigned char*返回22字节的字符串,
此消息为状态报告时此字段才有意义。
说明:可通过此字段去匹配相应的Submit消息
sSubmitdate 类型:char* 返回
说明:10字节的提交时间格式 YYMMDDHHMM(YY为年的后两位00-
99,MM:01-12,DD:01-31,HH:00-23,MM:00-59)
sDonedate 类型:char* 返回
说明:10字节的消息下发时间格式YYMMDDHHMM(同上面的sSubmitdata)
sStatus 类型:char*返回
说明:7字节的字符串, SP根据该字段确定CMPP_SUBMIT消息的
我在VB里的声名:
Public Declare Function GetDeliverSMExExEx Lib "smeidll" _
(sm_id As Long, DestTON As Byte, _
DestNPI As Byte, ByVal destaddr As Long, _
OrgTON As Byte, OrgNPI As Byte, _
ByVal orgaddr As Long, PRI As Byte, _
RP As Byte, UDHI As Byte, _
PID As Byte, DCS As Byte, _
ByVal TimeStamp As Long, udlen As Long, _
ByVal userdata As Long, StatusReport As Byte, _
ByVal sMsgID As Long, ByVal sSubmitdate As Long, _
ByVal sDonedate As Long, ByVal sStatus As Long) As Long
调用:
Dim sm_id, udlen As Long
Dim iret As Integer
Dim TimeStamp(20), userdata(142), sSubmitdate(20), sDonedate(20), sStatus(20) As Byte
Dim destaddr(30), orgaddr(30) As Byte
Dim sMsgID(23) As Byte
Dim userMobile, userContent, spMobile, spTime, smsid As String
Dim ssMsgID, ssSubmitdate, ssDonedate, ssStatus As String
Dim DestTON, DestNPI, OrgTON, OrgNPI, PRI, PID, DCS As Byte
Dim RP, UDHI As Byte
Dim StatusReport As Byte
StatusReport = 0
Dim mobile()
If HasDeliverMessage(100) = 0 Then
iret = GetDeliverSMExExEx(sm_id, DestTON, DestNPI, VarPtr(destaddr(0)), _
OrgTON, OrgNPI, _
VarPtr(orgaddr(0)), PRI, _
RP, UDHI, _
PID, DCS, _
VarPtr(TimeStamp(0)), udlen, _
VarPtr(userdata(0)), StatusReport, _
VarPtr(sMsgID(0)), VarPtr(sSubmitdate(0)), _
VarPtr(sDonedate(0)), VarPtr(sStatus(0)))
If iret = 0 Then
ssMsgID = StrConv(sMsgID, vbUnicode)
ReDim mobile(0 To UBound(destaddr) + 1)
CopyMemory VarPtr(mobile(0)), VarPtr(destaddr(0)), 20
mobiles = StrConv(mobile, vbUnicode)
能正常取到UDLEN和sMsgID,但destaddr,TimeStamp, userdata,sSubmitdate, sDonedate, sStatus orgaddr
取不出来,我用 CopyMemory VarPtr(mobile(0)), VarPtr(destaddr(0)), 20
然后 mobiles = StrConv(mobile, vbUnicode)
得到的mobiles是空的。
请问一下我怎么才能正常取出返回值呢,谢谢~!