频道栏目
首页 > 资讯 > Delphi > 正文

delphi 短信猫(SMS)编程总结

13-12-13        来源:[db:作者]  
收藏   我要投稿

现在有个项目需要用到发短信的功能,所以网上买了个西门子T35i 芯片的短信猫,但实际编程时才发现只能发短信,一般的DLL不支持发长短信,但公司会经常发长短信,联系卖家要求给个发长短信的动态库,但卖家说他那只有这个,长短信要收钱开发的,晕。(怀疑是故意的),然后又买了个支持长短信惠通猫(szhto.ocx、HTCOM.dll不支持线程),开始还行,但用久了不知为啥总是死机一样,发/接不了短信,并且总是有两条短信删不掉,一直留在那,找供应商都不理你,说我程序的问题,无语了,

那么只有自己上网找了,好在支持T35i的有许多,又把旧的猫拿来研究。经过不懈努力终于OK。(哈。。。。哈。。。。),过程中接触了几个DLL和OCX,我都来评说下吧。

1、sms.dll (好象迅塞公司的),可以发长短信,但不能给10086这样的短号码发信息。

同步发送的、它的功能也比较简单:

  function Sms_Connection(CopyRight:pchar;Com_Port,Com_BaudRate:integer;var Mobile_Type,CopyRightToCOM:PChar):integer;stdcall;external 'sms.dll';
  function Sms_Send(Sms_TelNum:string;Sms_Text:string):integer;stdcall;external 'sms.dll';
  Function Sms_Receive(Sms_Type:string;var Sms_Text:PChar):integer;stdcall;external 'sms.dll';
  function Sms_Delete(Sms_Index:string):integer;stdcall;external 'sms.dll';
  function Sms_AutoFlag :integer;stdcall;external 'sms.dll';
  function Sms_NewFlag :integer;stdcall;external 'sms.dll';
  function Sms_Disconnection :integer;stdcall;external 'sms.dll';

2、MonDem.dll (这个忘了是那家的了)支持多线程操作,功能也可以,但没研究出怎么发长短信,有知道的一定告之呀!

//函数说明
//先初始化,然后发送或者接收,退出程序前关闭Modem
{*************************************************************}
//  参数: nComNo 0~255 代表COM编号,
//        modemType 短信猫类型
//	  0 - 1口短信猫,
//        1 - 2口短信猫,
//        2 - 4口短信猫,
//        3 - 8短信猫口
//  返回: 0 - 成功, -1类型错
//        XXX -错误代码,参见代码表
{*************************************************************}
function fnSetModemType(ComNo:integer; modemType:Smallint) :integer;stdcall; external 'MonDem.dll';

{******************************************************}
//	获取当前短信猫类型设置
//参数: nComNo 0~255 代表COM编号。
//返回 :短信猫类型
//0 - 1口短信猫,
//1 - 2口短信猫,
//2 - 4口短信猫,
//3 - 8短信猫口
//XXX -错误代码,参见代码表
{*******************************************************}
function fnGetModemType(ComNo:integer):integer;stdcall; external 'MonDem.dll';

{***********************初始化函数***********************}
//参数: comx 0~7 代表端口号码, -1 表示所有端口
//返回: 0 - 成功  XXX -错误代码,参见代码表
{********************************************************}

function fnInitModem(comx:integer):integer;stdcall; external 'MonDem.dll';

{***********************发送函数*************************}
//参数: comx 0~7 代表端口号码, -1 表示任意一个可用端口
//receivephone  接受手机号,sendmsg表示发送信息内容
//sendmsg(应该在70个字符以内,包含标点符号,1个汉字算1个字符)
//例如: 恭喜发财,测试成功!   长度为10
//返回: 0 - 发送成功 1 - 发送失败 XXX -错误代码,参见代码表
{********************************************************}
function fnSendMsg(comx:integer;receivephone,sendmsg:pchar):integer;stdcall; external 'MonDem.dll';

{********************************************************}
 // 参数: nPortNo 0~255 代表端口号码, -1 表示所有端口
//返回: 端口状态,大于等于8表示设备连接正常,可以接收和发送。
 //     状态小于8,表示测试状态。小于等于1,可能连线没有接好或者电源
 //	  没有打开,注意复位短信猫。
 //    -1 端口号指定错误或者是端口未打开

{********************************************************}
function fnGetStatus(nPortNo:integer):integer;stdcall; external 'MonDem.dll';

{*************************接收函数***********************}
//参数: comx 0~7 代表端口号码,
//(-1 表示任意一个可用端口,暂时不支持)
//sendphone 发送方手机号码      receivemsg 接收信息内容
//返回: 0~7 - 成功,接收端口号码  -1 -  无信息
//XXX -错误代码,参见代码表
{********************************************************}
function fnReadMsgEx(comx:integer;szHeader,receivemsg:pchar):integer;stdcall; external 'MonDem.dll';

function fnGetSndCount(nPortNo:integer):integer;stdcall; external 'MonDem.dll';
function fnGetRecCount(nPortNo:integer):integer;stdcall; external 'MonDem.dll';
//function fnSetReceive(nType:integer):integer;stdcall; external 'MonDem.dll';

{************************关闭函数************************}
//参数: comx 0~7 代表端口号码, -1 表示所有端口
//返回: 0 - 成功  XXX -错误代码,参见代码表
{********************************************************}

function fnCloseModem(comx:integer):integer;stdcall; external 'MonDem.dll';

{*******************错误代码表:**************************}
// 100: 授权错误(检测软件狗)
// 101: 授权类型错误(检测软件狗类型)
// 102: 未初始化,请先初始化

// 200: 端口号码错
// 201: 不支持的端口
// 202: 信息超长
// 203: 不能发送空信息
// 204: 手机号码错
// 205: 设备错

//5xx: 操作xx号端口错误
{********************************************************}

3、SZHTO.OCX 控件,需要机器码注册,不支持10086发送,并且性能不稳定。用久了总要死回机不知为什么(大概4、5天吧!)

由于是OCX的方式,用起来还是比较方便的。

4、SMSControl.ocx Ver5.0(LY的)控件的用起来还是比较好用的,功能也多,但需要注册购买的,支持10086等短信发送。

不用买也是可以用的,没有连接/发送等状态的返回值,只能自己设置延时处理了。

                if Smscontrol1.SendMSG(QFindSend.Fields[1].AsString,QFindSend.Fields[2].AsString)>0 then  begin
                     Memo1.Lines.Add('发送成功!');
                   end
                 else begin
                   Memo1.Lines.Add('发送失败!')
                 end;


相关TAG标签
上一篇:android短信发送
下一篇:[LeetCode] Binary Tree Preorder Traversal & Binary Tree Postorder Traversal
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站