我用C#开发 采用的SMGP3.0 里面有提供API函数
A.3.5 接收短消息(SMGPDeliver)
作用
连接短消息网关,等待接收属于本SP 的短消息。
参数
参数名数据类型说明
nTimeout Int* 等待时间,单位:秒。0 表示永远等待。
pDeliverResp DeliverResp *
保存短消息的DeliverResp 结构指针
A.2.1 接收短消息的返回数据结构(DeliverResp)
用途
保存SMGPDeliver 函数返回的短消息内容。
字段说明
字段名数据类型说明
SMsgID Char(21) 短消息标识
NMsgFormat Int 短消息格式(参照短消息格式代码表)。网关不
做判定, 透明传输。
SSrcTermID Char(22) 短消息发送用户号码
NIsReport Int 是否为状态报告。代码含义:非状态报告(0);
状态报告(1)
NMsgLen Int 消息长度
sMsgContent Char(253) 消息内容
sDestTermID Char(22) SP 的接入代码
sRecvTime char(15) 短消息接收时间(格式:yyyymmddhhmiss,例如20010301200000)
sReserved Char(9) 保留代码如下:
声明:
[DllImport("SMGP\\SMEIDll.dll")]
public static extern int SMGPDeliver(int nTimeout, ref DeliverResp pDeliverResp); 定义结构:
public struct DeliverResp
{ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
public string SMsgID;
public int NMsgFormat;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 22)]
public string SSrcTermID;
public int NIsReport;
public int NMsgLen;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 253)]
public string sMsgContent;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 22)]
public string sDestTermID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
public string sRecvTime;
}
调用:
DeliverResp strResp = new DeliverResp();
int resp = SMGPDeliver(0, ref strResp);当我发短信到网关的时候这里的resp返回0表示函数返回成功,但是strResp成员值却不对,而且在结构定义中修改成员排序会影响各返回值,请问谁知道这为什么啊,我的代码哪里写错了么?
A.3.5 接收短消息(SMGPDeliver)
作用
连接短消息网关,等待接收属于本SP 的短消息。
参数
参数名数据类型说明
nTimeout Int* 等待时间,单位:秒。0 表示永远等待。
pDeliverResp DeliverResp *
保存短消息的DeliverResp 结构指针
A.2.1 接收短消息的返回数据结构(DeliverResp)
用途
保存SMGPDeliver 函数返回的短消息内容。
字段说明
字段名数据类型说明
SMsgID Char(21) 短消息标识
NMsgFormat Int 短消息格式(参照短消息格式代码表)。网关不
做判定, 透明传输。
SSrcTermID Char(22) 短消息发送用户号码
NIsReport Int 是否为状态报告。代码含义:非状态报告(0);
状态报告(1)
NMsgLen Int 消息长度
sMsgContent Char(253) 消息内容
sDestTermID Char(22) SP 的接入代码
sRecvTime char(15) 短消息接收时间(格式:yyyymmddhhmiss,例如20010301200000)
sReserved Char(9) 保留代码如下:
声明:
[DllImport("SMGP\\SMEIDll.dll")]
public static extern int SMGPDeliver(int nTimeout, ref DeliverResp pDeliverResp); 定义结构:
public struct DeliverResp
{ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
public string SMsgID;
public int NMsgFormat;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 22)]
public string SSrcTermID;
public int NIsReport;
public int NMsgLen;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 253)]
public string sMsgContent;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 22)]
public string sDestTermID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
public string sRecvTime;
}
调用:
DeliverResp strResp = new DeliverResp();
int resp = SMGPDeliver(0, ref strResp);当我发短信到网关的时候这里的resp返回0表示函数返回成功,但是strResp成员值却不对,而且在结构定义中修改成员排序会影响各返回值,请问谁知道这为什么啊,我的代码哪里写错了么?
我掉用了
[DllImport("SMEIDLL.dll", EntryPoint = "SMGP30_GetDeliverSM", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern int GetDeliverSM(int Ntimeout,
ref DeliverResp PdeliverResp
); [StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct DeliverResp
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
public string MsgID;
public byte uMsgFormat;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 22)]
public string SrcTermID;
public byte uIsReport;
public byte uMsgLength;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 253)]
public string MsgContent;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 22)]
public string DestTermID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
public string RecvTime;
public uint uTLVMask;
public byte uTP_pid;
public byte uTP_udhi;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
public string LinkID;
public byte uSubmitMsgType;
public byte uSPDealResult;
public byte uSrcTermType;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)]
public string SrcTermPseudo;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 9)]
public string Reserved;
}
你试试看哦