程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> delphi 短信貓(SMS)編程總結

delphi 短信貓(SMS)編程總結

編輯:Delphi

現在有個項目需要用到發短信的功能,所以網上買了個西門子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;


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved