DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: lambdaflow
今日帖子: 1
在线用户: 4
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 uptou (uptou) ★☆☆☆☆ -
普通会员
2003/10/17 10:01:56
标题:
请问这个函数在Delphi中该如何用呢? 浏览:4476
加入我的收藏
楼主: GetDeliverSMExExEx
【函数功能】
读取下发的短讯内容,并且能确认此消息是否为状态报告,用于CMPP协议中,SP需要短消息网关返回状态报告的内容。
【函数原型】
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消息的处理状态。具体值的意义见下表。
【调用举例】
ULONG ulsm_ID;
unsigned char byDestTON, byDestNPI, byOrgTON, byOrgNPI, byPRI, byPID, byDCS;
char sDestAddr[MAX_ADDR_LEN];
memset(sDestAddr, 0, MAX_ADDR_LEN);
char sOrgAddr[MAX_ADDR_LEN];
memset(sOrgAddr, 0, MAX_ADDR_LEN);
char sTimeStamp[MAX_TIMESTAMP_LEN];
memset(sTimeStamp, 0, MAX_TIMESTAMP_LEN);
char sUserData[MAX_UD_LEN];
memset(sUserData, 0, MAX_UD_LEN);
unsigned char MsgID[23];
memset(MsgID, 0, 23);
char sSubmitdate[MAX_SUBMIT_TIME_LEN+1];
memset(sSubmitdate, 0, MAX_SUBMIT_TIME_LEN+1);
char sDonedate[MAX_DONE_TIME_LEN+1];
memset(sDonedate, 0, MAX_DONE_TIME_LEN+1);
char sStatus[MAX_STATE_LEN+1];
memset(sStatus, 0, MAX_STATE_LEN+1);
int iRet;
unsigned char byRP;
unsigned char byUDHI;
unsigned long ulUDLen;
unsigned char byStatusReport = 0;
iRet = GetDeliverSMExEx(&ulsm_ID, &byDestTON, &byDestNPI, sDestAddr, &byOrgTON,&byOrgNPI, sOrgAddr, &byPRI, &byRP, &byUDHI, &byPID, &byDCS,sTimeStamp, &ulUDLen, sUserData, &byStatusReport,MsgID, sSubmitdate, sDonedate, sStatus);
if(iRet == 0)
{
   CString sGetData;
   sGetData.Format("接收成功!\n接受到数据:%s", sUserData);
  CString str;
  str.Format("接收到Deliver消息\n"    
             "源地址 = %s\n"
    "目标地址 = %s\n"
    "TimeStamp = %s\n"
    "正文 = %s\n"
    "状态报告标志 = %d\n"
    "MsgID = %s\n"
    "Submit date = %s\n"
    "done date = %s\n"
    "stat = %s",
    sOrgAddr, sDestAddr, sTimeStamp,
    sUserData, StatusReport, 
    MsgID, sSubmitdate, 
    sDonedate, sStatus);
  MessageBox(str,MB_OK,0);          
       }
      else
  MessageBox("接收失败!",MB_OK,0);

----------------------------------------------
-
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/17 11:28:07
1楼: 晕倒,这么复杂!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/17 11:29:56
2楼: CString??VC的原代码吧!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 uptou (uptou) ★☆☆☆☆ -
普通会员
2003/10/17 11:31:09
3楼: 这是原型函数,我现在要在Delphi中调用,该如何用呢?我是新手,还请各位老大指教。
----------------------------------------------
-
作者:
男 happyxhl (海柯) ★☆☆☆☆ -
盒子活跃会员
2003/10/17 13:43:05
4楼: 新手还搞这样的代码来,晕
----------------------------------------------
我有我风采
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/17 17:10:20
5楼: 带我慢慢看来! 你会很急吗?
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 uptou (uptou) ★☆☆☆☆ -
普通会员
2003/10/17 17:35:20
6楼: 有点急,不过你慢慢看,谢谢你。
----------------------------------------------
-
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/18 10:11:56
7楼: GetDeliverSMExExEx
【函数功能】
读取下发的短讯内容,并且能确认此消息是否为状态报告,用于CMPP协议中,SP需要短消息网关返回状态报告的内容。
【函数原型】
function GetDeliverSMExExEx( 
        sm_ID :PDword; 
        DestTON:PChar;
        DestNPI:PChar; 
        DestAddr:Pchar; 
        OrgTON:Pchar;
        OrgNPI:PChar;
        OrgAddr:PChar;  
        PRI:PChar; 
        RP:PChar; 
        UDHI:PChar; 
        PID:PChar;
        DCS:PChar; 
        TimeStamp:PChar;
        UDLen:PDword,;
        UserData:PChar;
        StatusReport:PChar;
        sMsgID:PChar; 
        sSubmitdate:PChar;
        sDonedate:PChar;
        sStatus:PChar):Longint;stdcall;
【参数说明】
Sm_ID
类型:PDword
意义:返回短消息的ID
DestTON
类型:PChar
意义:返回目标地址号码类型
DestNPI 
类型:PChar
意义;返回目标地址编码方案
DestAddr 
类型:PChar 返回最大长度为20字符串
意义:目标地址
OrgTON 
类型:PChar
说明:返回源地址号码类型
OrgNPI 
类型:PChar
说明:返回源地址编码方案
OrgAddr 
类型:PChar 返回最大长度为20字符串
说明:源地址
PRI 
类型:PChar
说明:返回优先级
RP 
类型:PChar
说明:返回回应路径
UDHI 
类型:PChar
说明:返回头结构指示
PID
类型:PChar
说明:返回协议标志
DCS 
类型:PChar
说明:返回编码方案
TimeStamp 
类型:PChar 返回最大长度为19字符串
说明:提交时间
UDLen 
类型:PDword
意义:返回短消息的UDL
UserData 
类型:PChar 返回最大长度为140字节的字符串(不包括'\0'字符)。
说明:正文(为状态报告时无意义)
StatusReport  
类型: PChar
返回:状态报告标志,0:表示不是状态报告,1:表示为状态报告                              
sMsgID
类型:PChar 返回22字节的字符串,此消息为状态报告时此字段才有意义。
说明:可通过此字段去匹配相应的Submit消息
sSubmitdate   
类型:PChar 
说明:10字节的提交时间格式 YYMMDDHHMM(YY为年的后两位00-99,MM:01-12,DD:01-31,HH:00-23,MM:00-59)
sDonedate     
类型:PChar 
说明:10字节的消息下发时间格式YYMMDDHHMM(同上面的sSubmitdata)
sStatus       
类型:PChar
说明:7字节的字符串, SP根据该字段确定CMPP_SUBMIT消息的处理状态。具体值的意义见下表。
【调用举例】
 
resourcestring
   
  r1='接收到Deliver消息'+#13#10+ 
     '源地址 := %s'+#13#10+
     '目标地址 := %s'+#13#10+
     'TimeStamp := %s'+#13#10+
     '正文 := %s'+#13#10+
     '状态报告标志 := %c'+#13#10+
     'MsgID := %s'+#13#10+
     'Submit date := %s'+#13#10+
     'done date := %s'+#13#10+
     'stat := %s';
 
  r2='接收成功!'+#13#10+'接受到数据:%s';
    
var
 ulsm_ID:DWord;
 byDestTON, byDestNPI, byOrgTON, byOrgNPI, byPRI, byPID, byDCS:PChar;
 sDestAddr:array [0..MAX_ADDR_LEN-1] of char;
 sOrgAddr:array [0..MAX_ADDR_LEN-1] of char;
 sTimeStamp:[0..MAX_TIMESTAMP_LEN]of char;
 sUserData:[0..MAX_UD_LEN]of char;
 MsgID:[0..22]of char;
 sSubmitdate:[0..MAX_SUBMIT_TIME_LEN]of char;
 sDonedate:[0..MAX_DONE_TIME_LEN]of char;
 sStatus:[0..MAX_STATE_LEN]of char;
 iRet:Longint;
 ulUDLen:DWord;
 byRP,byUDHI,byStatusReport:char;
 
 s1,s2:string;
begin
 
FillChar(sDestAddr, MAX_ADDR_LEN,0);
FillChar(sOrgAddr, MAX_ADDR_LEN,0);
FillChar(sTimeStamp, MAX_TIMESTAMP_LEN,0 );
FillChar(sUserData, MAX_UD_LEN,0);
FillChar(MsgID, 23,0);
FillChar(sSubmitdate,MAX_SUBMIT_TIME_LEN+1, 0);
FillChar(sDonedate, MAX_DONE_TIME_LEN+1,0);
FillChar(sStatus, MAX_STATE_LEN+1,0);
byStatusReport:='0';
//-----------------------------
iRet := GetDeliverSMExEx(ulsm_ID, byDestTON, byDestNPI, sDestAddr, 
            byOrgTON,byOrgNPI, sOrgAddr, byPRI, byRP, byUDHI, byPID, byDCS,sTimeStamp,
          ulUDLen, sUserData, byStatusReport,MsgID, sSubmitdate, sDonedate, sStatus);
 
if(iRet = 0) then
 begin//1
   s2:=Format(r2, [sUserData]);
   s1:=Format(r1,[sOrgAddr, sDestAddr, sTimeStamp,sUserData, StatusReport, 
                  MsgID, sSubmitdate, 
                   sDonedate, sStatus]);
      MessageBox(application.handle,Pchar(s1),'ok',MB_OK); 
 end//1
 else
     MessageBox(application.handle,'接收失败!','fail',MB_OK);
 
end;
 

----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/18 10:13:18
8楼: T1
此帖子包含附件:
JPEG 图像
大小:108.3K
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/18 10:14:14
9楼: 如有不对,再说吧!
此帖子包含附件:
JPEG 图像
大小:53.8K
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 uptou (uptou) ★☆☆☆☆ -
普通会员
2003/10/19 0:27:31
10楼: 我按照你上面的方法写,可是运行时提示内存出错,原因为何?可否给一些建议?
----------------------------------------------
-
作者:
男 zizii (高高高级馒头) ★☆☆☆☆ -
神秘会员
2003/10/19 0:35:06
11楼: 厉害,新手就做华为的那个短信接口,佩服!
你用的CMPP还是SMPP,如果是CMPP用这个就行了:

  //CMPP取下发短讯
  function GetDeliverSMExEx(sm_ID: PULONG;
                            DestTON: PUChar;
                            DestNPI: PUChar;
                            DestAddr: PChar;
                            OrgTON: PUChar;
                            OrgNPI: PUChar;
                            OrgAddr: PChar;
                            PRI: PUChar;
                            RP: PUChar;
                            UDHI: PUChar;
                            PID: PUChar;
                            DCS: PUChar;
                            TimeStamp: PChar;
                            UDLen: PDWORD;
                            UserData: PChar;
                            StatusReport: PUChar): Integer stdcall; external DLL;

以上函数是原型翻译过来,简化以后就是这样的:

function GetDeliverSM(var ulsm_ID:LongInt;
                      var w_sDestAddr:string;
                      var w_sOrgAddr:string;
                      var w_sTimeStamp:string;
                      var w_sUserData:string):Integer;
var
  byDestTON, byDestNPI, byOrgTON, byOrgNPI, byPRI, byPID, byDCS : Char;

  sDestAddr:array[0..MAX_ADDR_LEN-1]of Char;
  sOrgAddr:array[0..MAX_ADDR_LEN-1]of Char;
  sTimeStamp:array[0..MAX_TIMESTAMP_LEN-1]of Char;
  sUserData:array[0..MAX_UD_LEN-1]of Char;

  byRP:UChar;
  byUDHI:UChar;
  ulUDLen:LongInt;
  byStatusReport:UChar;

  iRet:Integer;
begin
  byStatusReport:=0;
  iRet:=GetDeliverSMExEx(@ulsm_ID,
                         @byDestTON,
                         @byDestNPI,
                         sDestAddr,
                         @byOrgTON,
                         @byOrgNPI,
                         sOrgAddr,
                         @byPRI,
                         @byRP,
                         @byUDHI,
                         @byPID,
                         @byDCS,
                         sTimeStamp,
                         @ulUDLen,
                         sUserData,
                         @byStatusReport);
  Result:=iRet;

  w_sDestAddr:=sDestAddr;
  w_sOrgAddr:=sOrgAddr;
  w_sTimeStamp:=sTimeStamp;
  w_sUserData:=sUserData;
end;

以上代码本站长专用,不知道你用起来有没有问题:~)
----------------------------------------------
维护世界和平,共创美好盒子。
作者:
男 Giver (Giver) ★☆☆☆☆ -
盒子活跃会员
2003/10/19 14:06:14
12楼: 这是些什么东西啊,可否详细介绍一下关于短信平台的资料啊,或者哪里可以找到啊
----------------------------------------------
http://www.gaiwei.com
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/19 15:25:13
13楼: 我只是翻译,没调试,我现在可没心事做这个!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 uptou (uptou) ★☆☆☆☆ -
普通会员
2003/10/19 16:15:21
14楼: Giver把你邮件地址留下,我发给你资料,大家共同参详一下。
----------------------------------------------
-
作者:
男 uptou (uptou) ★☆☆☆☆ -
普通会员
2003/10/19 16:25:11
15楼: 站长,我不是很明白你的意思?可否解释一下?你所指的简化是什么意思?另外,那几个MAX的值从何而来?
----------------------------------------------
-
作者:
男 uptou (uptou) ★☆☆☆☆ -
普通会员
2003/10/19 17:10:53
16楼: 还有就是那个sTimeStamp的值怎么总是为空?
----------------------------------------------
-
作者:
男 zizii (高高高级馒头) ★☆☆☆☆ -
神秘会员
2003/10/19 18:46:55
17楼: max自己根据文档说明定义的。
----------------------------------------------
维护世界和平,共创美好盒子。
作者:
男 Giver (Giver) ★☆☆☆☆ -
盒子活跃会员
2003/10/19 19:09:00
18楼: to uptou :
谢谢,这是我的信箱:delphier@163.com
希望和你成为好朋友!
----------------------------------------------
http://www.gaiwei.com
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/19 20:21:50
19楼: to:Giver  
偶向你请教!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 uptou (uptou) ★☆☆☆☆ -
普通会员
2003/10/19 22:21:04
20楼: 为什么总是返回4?

PRI:=0;
  DCS:=15;
  RD:=0;
  RP:=0;
  SRR:=1;
  MR:=0;
  PID:=0;
  UDHI:=0;
  S_sms:='大家好才是真的好!';
  Udlen:=length(S_sms);
  S_iRet:=SubmitAExEx(2,//OrgTON源地址号码类型
                      1,//OrgNPI: Byte源地址编码方案
                      '03339',//OrgAddr: String;源地址,最大长度20个ASC字符
                      2,//DestTON,目标地址号码类型。取值同OrgTON
                      1,//DestNPI: Byte,目标地址编码方案。取值同OrgNPI
                      '13926649920',//DestAddr: String;目标地址
                      PRI,//PRI,SM优先级
                      RD,//RD,保留,设置为0
                      RP,//RP,回应路径,保留,设置为0
                      SRR,//SRR,状态报告,保留,设置为0;需要状态报告时,设置为1
                      MR,//MR,//消息索引,保留,设置为0
                      DCS,//DCS,//数据编码方案
                      PID,//PID: Byte;协议类型,缺省为0
                      ',//Schedule,定时时间,注意:时间格式必须为"yyyy/mm/dd hh:mm:ss"。缺省为NULL,长度为19个ASC字符
                      ',//Expire: String;超时时间,注意:时间格式必须为"yyyy/mm/dd hh:mm:ss"。缺省为NULL,长度为19个ASC字符
                      0,//Default_ID: LongWord;缺省短消息的信息码,缺省为0
                      UDHI,//UDHI: Byte;用于长短消息,表示UserData是否是结构
                      UdLen,//: Integer; 表示UserData的长度
                      S_sms,//UserData,用户信息,短消息正文
                      ',//ServiceSubType: String;业务类型,通过此值来判断计费,缺省值为NULL
                      byMsgID,//byMsgID,返回ACK应答消息的MsgID
                      1,//byPKTotal,相同Msg_id的消息总条数,从1开始
                      1,//byPKNumber,相同Msg_id的消息序号,从1开始
                      0,//byMsglevel,信息级别,缺省为0
                      0,//byFeeUserType: Byte;计费用户类型字段
                      '999999',//sSPID,信息内容来源(Src_ID),对应CMPP的 Msg_src
                      '02',//sFeeType,资费类别
                      ',//sFeeAddr,被计费用户的号码
                      '000020',//sFeeCode: String;资费代码,以分为单位
                      1,//byUserNum: Byte;接收消息的用户数量
                      '13926649920',//sDestAddrs: String;接收业务MSISDN号码,最多100个MSISDN号码
                      @SM_ID,//SM_ID: Cardinal; 返回短消息ID
                      @FCS);//FCS: Byte)
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行113.2813毫秒 RSS