华为的SMEIDLL.DLL中SubmitAExEx(短信接口)
声明:
int WINAPI SubmitAExEx(
unsigned char OrgTON, //源地址号码类型
unsigned char OrgNPI, //源地址编码方案
LPCTSTR OrgAddr, //源地址 char[MAX_ADDR_LEN]
unsigned char DestTON, //目标地址号码类型
unsigned char DestNPI, //目标地址编码方案
LPCTSTR DestAddr,/*update*/ //最多支持100个目的地址
unsigned char PRI, //SM优先级
unsigned char RD, //当源地址和目的地址相同时,是否替换存在的短消息。
unsigned char RP, //回应路径
unsigned char SRR, //是否需要状态报告
unsigned char MR, //消息索引
unsigned char DCS, //数据编码方案
unsigned char PID, //协议类型
LPCTSTR Schedule, //定时 char[MAX_TIMESTAMP_LEN]
LPCTSTR Expire, //超时时间 char[MAX_TIMESTAMP_LEN]
unsigned long Default_ID, //缺省短消息
unsigned char UDHI, //1表示UD为一个结构,0表示缺省
unsigned long UDLen, //表示UD的长度
LPCTSTR UserData, //用户信息,短消息正文
LPCTSTR sServiceType, //业务子类型 by ycl 2001.7.9
unsigned char* byMsgID,/*new*/ //MAX_MSG_ID,CMPP的字段,消息ID
unsigned char byPKTotal,/*new*/ //相同Msg_id的消息总条数,从1开始
unsigned char byPKNumber,/*new*/ //相同Msg_id的消息序号,从1开始
unsigned char byMsglevel,/*new*/ //信息级别
unsigned char byFeeUserType,/*new*/ //计费用户类型字段,0:对目的终端MSISDN计费;1:对源终端MSISDN计费;2:对SP计费;3:表示本字段无效
LPCTSTR sSPID,/*new*/ //MAX_SPID_LEN,信息内容来源
LPCTSTR sFeeType,/*new*/ //MAX_FEE_TYPE_LEN,资费类别
LPCTSTR sFeeAddr,/*new*/ //MAX_ADDR_LEN,被计费用户地址
LPCTSTR sFeeCode,/*new*/ //MAX_FEE_CODE_LEN,资费代码
unsigned char byUserNum,/*new*/ //接收消息的用户数量
LPCTSTR sDestAddrs,/*new*/ //目的地址,最多100个
unsigned long* SM_ID, //返回:短消息ID
unsigned char* FCS //返回:失败原因
);调用:
int iRet;
unsigned long SM_ID; //返回:短消息I
unsigned char FCS;
unsigned long UDLen;
LPCTSTR UserData;
UserData="This is a test send";
UDLen=strlen(UserData); unsigned char byMsgID[MAX_MSG_ID]; //CMPP的字段,消息ID
memset(byMsgID, 0, MAX_MSG_ID); iRet = SubmitAExEx(2,
1,
m_sOrgAddr,
2,
1,
m_sDestAddr,
0,
0,
0,
0,
0,
0,
0,
NULL,
NULL,
0,
0,
UDLen,
(LPCTSTR)UserData,
"icp",
byMsgID,
1,
1,
0,
1,
"spid",
"1",
"",
"11",
1,
m_sDestAddr,
&SM_ID,
&FCS); 请问,在Delphi中如何声明,如何调用?
声明:
int WINAPI SubmitAExEx(
unsigned char OrgTON, //源地址号码类型
unsigned char OrgNPI, //源地址编码方案
LPCTSTR OrgAddr, //源地址 char[MAX_ADDR_LEN]
unsigned char DestTON, //目标地址号码类型
unsigned char DestNPI, //目标地址编码方案
LPCTSTR DestAddr,/*update*/ //最多支持100个目的地址
unsigned char PRI, //SM优先级
unsigned char RD, //当源地址和目的地址相同时,是否替换存在的短消息。
unsigned char RP, //回应路径
unsigned char SRR, //是否需要状态报告
unsigned char MR, //消息索引
unsigned char DCS, //数据编码方案
unsigned char PID, //协议类型
LPCTSTR Schedule, //定时 char[MAX_TIMESTAMP_LEN]
LPCTSTR Expire, //超时时间 char[MAX_TIMESTAMP_LEN]
unsigned long Default_ID, //缺省短消息
unsigned char UDHI, //1表示UD为一个结构,0表示缺省
unsigned long UDLen, //表示UD的长度
LPCTSTR UserData, //用户信息,短消息正文
LPCTSTR sServiceType, //业务子类型 by ycl 2001.7.9
unsigned char* byMsgID,/*new*/ //MAX_MSG_ID,CMPP的字段,消息ID
unsigned char byPKTotal,/*new*/ //相同Msg_id的消息总条数,从1开始
unsigned char byPKNumber,/*new*/ //相同Msg_id的消息序号,从1开始
unsigned char byMsglevel,/*new*/ //信息级别
unsigned char byFeeUserType,/*new*/ //计费用户类型字段,0:对目的终端MSISDN计费;1:对源终端MSISDN计费;2:对SP计费;3:表示本字段无效
LPCTSTR sSPID,/*new*/ //MAX_SPID_LEN,信息内容来源
LPCTSTR sFeeType,/*new*/ //MAX_FEE_TYPE_LEN,资费类别
LPCTSTR sFeeAddr,/*new*/ //MAX_ADDR_LEN,被计费用户地址
LPCTSTR sFeeCode,/*new*/ //MAX_FEE_CODE_LEN,资费代码
unsigned char byUserNum,/*new*/ //接收消息的用户数量
LPCTSTR sDestAddrs,/*new*/ //目的地址,最多100个
unsigned long* SM_ID, //返回:短消息ID
unsigned char* FCS //返回:失败原因
);调用:
int iRet;
unsigned long SM_ID; //返回:短消息I
unsigned char FCS;
unsigned long UDLen;
LPCTSTR UserData;
UserData="This is a test send";
UDLen=strlen(UserData); unsigned char byMsgID[MAX_MSG_ID]; //CMPP的字段,消息ID
memset(byMsgID, 0, MAX_MSG_ID); iRet = SubmitAExEx(2,
1,
m_sOrgAddr,
2,
1,
m_sDestAddr,
0,
0,
0,
0,
0,
0,
0,
NULL,
NULL,
0,
0,
UDLen,
(LPCTSTR)UserData,
"icp",
byMsgID,
1,
1,
0,
1,
"spid",
"1",
"",
"11",
1,
m_sDestAddr,
&SM_ID,
&FCS); 请问,在Delphi中如何声明,如何调用?
CString m_sDestAddr;忘了这两个变量的声明!
这个函数是用来发送短信的!
function SubmitAExEx(
OrgTON: BYTE; //源地址号码类型
OrgNPI: BYTE; //源地址编码方案
const OrgAddr: PChar; //源地址 char[MAX_ADDR_LEN]
DestTON: BYTE; //目标地址号码类型
DestNPI: BYTE; //目标地址编码方案
const DestAddr: PChar; //最多支持100个目的地址
PRI: BYTE; //SM优先级
RD: BYTE; //当源地址和目的地址相同时,是否替换存在的短消息。
RP: BYTE; //回应路径
SRR: BYTE; //是否需要状态报告
MR: BYTE; //消息索引
DCS: BYTE; //数据编码方案
PID: BYTE; //协议类型
const Schedule: PChar; //定时 char[MAX_TIMESTAMP_LEN]
const Expire: PChar; //超时时间 char[MAX_TIMESTAMP_LEN]
Default_ID: DWORD; //缺省短消息
UDHI: BYTE; //1表示UD为一个结构,0表示缺省
UDLen: DWORD; //表示UD的长度
const UserData: PChar; //用户信息,短消息正文
const sServiceType: PChar; //业务子类型 by ycl 2001.7.9
byMsgID: PBYTE; //MAX_MSG_ID,CMPP的字段,消息ID
byPKTotal: BYTE; //相同Msg_id的消息总条数,从1开始
byPKNumber: BYTE; //相同Msg_id的消息序号,从1开始
byMsglevel: BYTE; //信息级别
byFeeUserType: BYTE; //计费用户类型字段,0:对目的终端MSISDN计费;1:对源终端MSISDN计费;2:对SP计费;3:表示本字段无效
const sSPID: PChar; //MAX_SPID_LEN,信息内容来源
const sFeeType: PChar; //MAX_FEE_TYPE_LEN,资费类别
const sFeeAddr: PChar; //MAX_ADDR_LEN,被计费用户地址
const sFeeCode: PChar; //MAX_FEE_CODE_LEN,资费代码
byUserNum: BYTE; //接收消息的用户数量
const sDestAddrs: PChar; //目的地址,最多100个
SM_ID: PDWORD; //返回:短消息ID
FCS: PBYTE //返回:失败原因
):integer; stdcall; external 'xxx.dll';
procedure TMainForm.Button1Click(Sender: TObject);
var
iRet: Integer;
SM_ID: DWORD; //返回:短消息I
FCS: BYTE;
UDLen: DWORD;
byMsgID: array [0..MAX_MSG_ID] of BYTE; //CMPP的字段,消息ID
const
UserData: PChar = 'This is a test send';
m_sOrgAddr: PChar = 'xx';
m_sDestAddr: PChar = 'yy';
begin
UDLen := strlen(UserData);
ZeroMemory(@byMsgID, MAX_MSG_ID); iRet := SubmitAExEx(
2,
1,
m_sOrgAddr,
2,
1,
m_sDestAddr,
0,
0,
0,
0,
0,
0,
0,
nil,
nil,
0,
0,
UDLen,
UserData,
'icp',
@byMsgID,
1,
1,
0,
1,
'spid',
'1',
'',
'11',
1,
m_sDestAddr,
@SM_ID,
@FCS);
end;
int WINAPI GetDeliverSMExEx(
ULONG* sm_ID, //返回:短讯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 //返回:状态报告标志,0表示不是状态报告,1:表示为状态报告
);调用:ULONG ulsm_ID;
char sDestAddr[MAX_ADDR_LEN];
memset(sDestAddr, 0, MAX_ADDR_LEN);
nsigned char byDestNPI;
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);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);
if(iRet == 0)
{
CString sGetData;
sGetData.Format("接收成功!\n接受到数据:%s", sUserData);
MessageBox(sGetData,MB_OK,0); }
else
MessageBox("接收失败!",MB_OK,0);