短信猫二次开发包DLL

作者:admin 发表时间:2014/3/21 16:33:54

一、函数说明
1. void GetVerInfo(char * szRetVer); //获取版本信息函数
2. int iSetSerialNo(char* szCorp,char* szInputSN); //序列号授权函数
3. HANDLE hOpenComm(const char *szPort, const int iBaudRate ); //打开串口函数
4. bool bCloseComm(HANDLE hComm); //关闭串口函数
5. bool bAutoInit(HANDLE hComm, int iBaudRate, STRUCommInfo *CommInfo,int iSMSFormat,
6. char *szErrInfo); //自动初始化函数
7. bool bSendMsg(HANDLE hComm,char *szMsg,char *szPhNbr,char *szSCA,char *szNextMsg,int iSMSFormat,char *szErrInfo); //短信发送函数
8. int iRecvMsg(HANDLE hComm,SM_RCV_STRU *RcvSMS, int iSMSFormat,char *szErrInfo);//接收短信函数
9. bool bSendWapPush(HANDLE hComm,char* szPhNbr,char* szWapTitle, char* szWapUrl,char *szErrInfo); //发送WAP Push 短信函数
10.bool bMakeCall(HANDLE hComm, char * szPhNbr,char * szSpeakerID, char * szErrInfo));//拨打电话函数
11. bool bSendDTMF(HANDLE hComm,char *szDTMFStr,char *szErrInfo); //发送DTMF串函数
12. bool bHangUp(HANDLE hComm,char *szErrInfo); //挂机函数

二、函数详解

1. 获取版本信息函数

函数名称:void GetVerInfo(char* szRetVer);
入口参数:无
出口参数:szRetVer
函数返回:无
功能描述:
调用本函数,通过szRetVer 返回版本信息,例如“3.5-05.09.19”。

2. 序列号授权函数

函数名称:int iSetSerialNo(char* szCorp,char* szInputSN);
入口参数:szCorp ●公司标识
     szInputSN ●授权的序列号
函数返回:1 ●序列号校验正确
    -100 ●序列号校验错误
功能描述:
    使用本函数,填写授权的序列号激活SMSCOM SDK的正式版本功能。其中,szCorp必须输入“北京华阳佳讯”或“www.ctc365.com”才能使用短信发送函数,否则短信发送函数不工作,直接返回执行错误false。其中,szInputSN 输入授权的序列号。
校验正确,函数返回1,短信发送函数将全部激活。
校验错误,函数返回-100,每次短信发送函数bSendMsg()的内容长度为80~140的随机数,余下的短信内容可再次调用bSendMsg()发送。

3. 打开串口函数
函数名称:HANDLE hOpenComm(const char *szPort,const int iBaudRate);
入口参数:szPort ●串口名称
   iBaudRate ●串口速率
函数返回:HANDLE ●打开成功
      INVALID_HANDLE_VALUE ●打开失败
功能描述:
    调用此函数打开串口成功后,才可调用短信收发函数,串口使用完毕,调用bCloseComm()函数关闭串口。

4. 关闭串口函数

函数名称:bool bCloseComm(HANDLE hComm);
入口参数:hComm ●待关闭的串口句柄
函数返回:true ●关闭成功
     false ●关闭失败
功能描述:
    调用hOpenComm()函数打开串口成功,返回串口句柄HANDLE。串口使用完毕,请调用bCloseComm()函数关闭串口。

5. 自动初始化函数

函数名称:bool bAutoInit(HANDLE hComm, int iBaudRate ,STRUCommInfo *CommInfo,int iSMSFormat,char *szErrInfo);
入口参数:hComm ●串口句柄
   iBaudRate ●通讯速率
   iSMSFormat ●短信编码模式
出口参数:CommInfo ●获取的串口信息
     szErrInfo ●初始化出错信息
函数返回:true ●初始化成功
     false ●初始化失败
功能描述:
    程序自动初始化串口(默认通讯速率为9600),并从SIM 中自动读取短信中心号码,保存到CommInfo->szSCA字段中。如果初始化失败,请到szErrInfo 中查看具体出错信息。其中,iSMSFormat 短信编码格式:0-PDU 格式(中国大陆使用),1-Text 格式(拉丁语系国家使用)。
   
6. 短信发送函数

函数名称:bool bSendMsg(HANDLE hComm,char *szMsg,char *szPhNbr,char *szSCA,char *szNextMsg,int iSMSFormat,char *szErrInfo);
入口参数:hComm ●串口句柄
     szMsg ●短待的发信内容
     szPhNbr ●目的手机号
     szSCA ●短信中心号码(可以为空)
     iSMSFormat ●短信编码模式
出口参数:szNextMsg ●超长部分的待发内容
     szErrInfo ●出错信息
函数返回:true ●发送成功
     false ●发送失败
功能描述:
  此函数用于发送短信,短信中心号码从bAutoInit()的CommInfo->szSCA中获取。单条短信内容长度为140,计算方法前面已经提及。对于超长短信,出口参数szNextMsg 返回超长部分的待发内容。所以短信发送成功后,请查看szNextMsg 是否为空,如果szNextMsg非空,请继续发送szNextMsg中的内容,一直到szNextMsg 为空才停止调用bSendMsg()。
注意事项:
  如果您使用SDK 是测试版本或iSetSerialNo()返回错误,则bSendMsg()函数中的短信长度为80~140之间的随机数;iSetSerialNo()返回授权正确,单条短信内容长度为140,不会存在随机数问题。给小灵通发送短信时,目标号码为“区号”+“小灵通号”,例如:01081964927。
应用范例:
bool bSndSucc=false; //发送成功标记
bool bRet=false;
: //其他代码
while(strlen(szNeedSndMsg)>0)
{
bRet=bSendMsg(hComm, szNeedSndMsg, szPhNbr, szSCA, &szNextMsg[0], iSMSFormat,
&szErrInfo[0]);
if (bRet= =false) //发送失败
{ bSndSucc=false; break; }
else
{
if(strlen(szNextMsg)>0) //超长部分的待发内容
{ strcpy(szNeedSndMsg,szNextMsg); }
else
{ bSndSucc=true; /*发送成功*/ }
}
}

7. 短信接收函数

函数名称:int iRecvMsg(HANDLE hComm,SM_RCV_STRU *RcvSMS,int iSMSFormat,char *szErrInf);
入口参数:hComm ●串口句柄
     RcvSMS ●接收到的短信内容
     iSMSFormat ●短信编码格式
出口参数:szErrInfo ●出错信息
函数返回:N ●接收到的短信条数(N>=0)
功能描述:
  此函数用于接收手机卡中未读短信,接收到的短信内容存放在RcvSMS 变量中,并将此短信从手机卡中删除。函数返回数表示接收到的短信条数。如果初始化失败,请到szErrInfo 中查看具体出错信息。
   
8. WAP Push短信发送函数

函数名称:bool bSendWapPush(HANDLE hComm,char* szPhNbr,char* szWapTitle,char* szWapUrl,char *szErrInfo);
入口参数:hComm ●串口句柄
     szPhNbr ●目的手机号
     szWapTitle ●短信标题
     szWapUrl ●短信链接URL
出口参数:szErrInfo ●出错信息
函数返回:true ●发送成功
     false ●发送失败
功能描述:
    此函数用于发送WAP Push 短信。
注意事项:
应用范例:
bool bSndSucc=false; //发送成功标记
bool bRet=false;
char szErrInfo[512]; //存放返回的错误信息
: //其他代码
while(strlen(szNeedSndMsg)>0)
{
bRet=bSendWapPush(hComm,szTmpSndPh,szTmpMsg,szTmpUrl,&szErrInfo[0]);
if (bRet= =false) //发送失败
{ bSndSucc=false; break; }
else /*发送成功*/
{ bSndSucc=true; }
}

9. 清空SIM卡短信函数

函数名称:bool bClrSIM (HANDLE hComm,char *szErrInfo);
入口参数:hComm ●串口句柄
出口参数:szErrInfo ●出错信息
函数返回:true ●操作成功
     false ●操作失败
功能描述:
    此函数用于清空手机SIM 卡内短信。
注意事项:
应用范例:
bool bRet=false;
char szErrInfo[300];
bRet=bClrSIM(hComm,&szErrInfo[0]);
if(bRet)
{
   m_State="清空成功";
}
else
{
   m_State="清空失败";
}

10. 建立语音呼叫函数

函数名称:bool bMakeCall(HANDLE hComm, char *szPhNbr,char *szSpeakerID, char *szErrInfo);
入口参数:hComm ●串口句柄
     szPhNbr ●被叫号码
     szSpeakerID ●语音通道ID
出口参数:szErrInfo ●出错信息
函数返回:true ●建立呼叫成功
     false ●建立呼叫失败
功能描述:
  此函数用于建立语音呼叫,其中语音通道ID (=0,1)是指Modem的Speaker/MicoPhone 使用的通道。不同的芯片,提供的语音通道数量不同。对于常用芯片,Q2303/Q2403A/Q2406Q/Q24系列,语音通道ID 可选数值为0或1;
应用范例:
bool bRet=false;
bRet=bMakeCall(hComm,”13800138000”,”0”, &szErrInfo[0]);
if(bRet)
{
m_State="建立呼叫成功";
}
else
{
m_State="建立呼叫失败";
}

11. 发送 DTMF串函数

函数名称:bool bSendDTMF (HANDLE hComm, char* szDTMFStr, char *szErrInfo);
入口参数:hComm ●串口句柄
      szDTMFStr ●待发送的DTMF串
出口参数:szErrInfo ●出错信息
函数返回:true ●发送DTMF成功
          false ●发送DTMF失败
功能描述:
  在成功建立语音呼叫后,再使用此函数发送DTMF码(用户按键串)
应用范例:
bool bRet=false;
bRet= bSendDTMF (hComm,”13800138000#”, &szErrInfo[0]);
if(bRet)
{
m_State="发送DTMF成功";
}
else
{
m_State="发送DTMF失败";
}

12. 挂机函数
函数名称:bool bHangUp(HANDLE hComm, char *szErrInfo);
入口参数:hComm ●串口句柄
出口参数:szErrInfo ●出错信息
函数返回:true ●发送DTMF成功
     false ●发送DTMF失败
功能描述:
  电话语音通话完成后,使用此函数挂机。
应用范例:
bool bRet=false;
bRet= bHangUp (hComm, &szErrInfo[0]);
if(bRet)
{
m_State="挂机成功";
}
else
{
m_State="挂机失败";
}

13. 获取信号函数
函数名称:bool bGetCSQ(HANDLE hComm, char *szCSQ,char *szErrInfo);
入口参数:hComm ●串口句柄
出口参数:szCSQ ●信号强度
     szErrInfo ●出错信息
函数返回:true ●发送DTMF成功
     false ●发送DTMF失败
功能描述:
  在插入手机卡的情况下,获取当前设备信号强度。szCSQ=(信号强度,信号质量) 例如”31,0”信号强度范围 0~31, 越大越好;99 表示没信号,此时应检查天线或SIM卡是否安装正确。信号质量越接近0越好。
应用范例:
bool bRet=false;
char szCSQ[10]
bRet= bGetCSQ (hComm, ,&szCSQ[0],&szErrInfo[0]);
if(bRet) //成功获取信号强度
{
If(szCSQ 信号强度==“99”)
检查天线或SIM卡是否安装正确;
Else if(szCSQ 信号强度<=“16”)
手机信号弱处理;
Else
正常处理;
}
else
{
获取信号失败处理;
}

三、普通短信应用示例
#include "SMSCOM.h"
:
void SMSComDemo (void)
{
bool bRet=false,bSndSucc=false;
int iErrCode=-255;
int i,iTmpRcvSmsTotal=0;
int iSMSFormat=0; //PDU方式收发短信(中国大陆使用)
HANDLE hComm; //串口句柄
STRUCommInfo CommInfo; //串口设备信息
SM_RCV_STRU RcvSms; //接收到的短信
char szErrInfo[30],szVerInfo[30],szTmp[30];
char szNeedSndMsg[1024],szSndPhNbr[30],szSCA[30],szNextMsg[1024];
char szRcvPh[30],szRcvMsg[300],szRcvDateTime[30];
//初始化变量
memset(szNeedSndMsg,0,sizeof(szNeedSndMsg));
memset(szSndPhNbr,0,sizeof(szSndPhNbr));
memset(szSCA,0,sizeof(szSCA));
memset(szErrInfo,0,sizeof(szErrInfo));
memset(szVerInfo,0,sizeof(szVerInfo));
GetVerInfo(&szVerInfo[0]); //获取版本信息
//正版授权注册//iErrCode=1校验正确iErrCode=-100 错误
//iErrCode=iSetSerialNo("北京华阳佳讯","");
iErrCode=iSetSerialNo("www.ctc365.com","");
strcpy(szTmp,"COM4");
hComm=hOpenComm(szTmp,9600); //打开串口
if((hComm!=NULL)&&(hComm!=INVALID_HANDLE_VALUE))
{
strcpy(szTmp,"打开成功");
bRet=bAutoInit(hComm,&CommInfo,iSMSFormat,szErrInfo); //自动初始化
strcpy(szSCA,CommInfo.szSCA);
}
else
{ strcpy(szTmp,"打开失败"); return; }
Sleep(500);
//--发送短信处理-------------
strcpy(szSndPhNbr,"10086");
strcpy(szNeedSndMsg,"预计今天中午到京的\"法兰西巡逻兵\"特技飞行表演队的10 名队员及
其驾驶的10架表演飞机,直到中午11时40分才迟迟从武汉起飞.据了解,由于北京南苑机场上空能见度
达不到降落标准,特飞队中午备降首都国际机场.");
while(strlen(szNeedSndMsg)>0)
{
memset(szNextMsg,0,sizeof(szNextMsg));
bRet=bSendMsg(hComm, szNeedSndMsg, szSndPhNbr, szSCA,&szNextMsg[0],
iSMSFormat,&szErrInfo[0]);
memset(szNeedSndMsg,0,sizeof(szNeedSndMsg));
if(bRet==false) //发送失败
{ bSndSucc=false; break; }
else
{
if(strlen(szNextMsg)>0) //超长部分的待发内容
{ strcpy(szNeedSndMsg,szNextMsg); }
else
{ bSndSucc=true; break; /*发送成功*/ }
}
}
Sleep(1000);
//--接收短信处理-------------
// TODO: Add your control notification handler code here
RcvSms.iSmsTotal=0; //初始化接收短信数
iTmpRcvSmsTotal=iRecvMsg(hComm,&RcvSms,iSMSFormat,szErrInfo);
if(iTmpRcvSmsTotal>0) //接收到短信数>0
{
for(i=0;i<iTmpRcvSmsTotal;i++)
{ strcpy(szRcvMsg,RcvSms.SMS[i].TP_UD); //短信内容
strcpy(szRcvDateTime,RcvSms.SMS[i].TP_SCTS); //发送时间
strcpy(szRcvPh,RcvSms.SMS[i].TPA); //发送者的手机号
}
}
//关闭串口
bRet=bCloseComm(hComm);
}