我用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成员值却不对,而且在结构定义中修改成员排序会影响各返回值,请问谁知道这为什么啊,我的代码哪里写错了么?

解决方案 »

  1.   

    正好最近也在开发这个,交流一下吧。
    我掉用了
     [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;
            }
    你试试看哦