本人是Delphi初学者,想找个东东学习一下Delphi,容易的没什么意思,难的又吃不消,最后决定拿:编写发送短消息的动态链接库来作为练习的材料,希望想学习Delphi的程序员加入一起学习,也希望各位高手能鼎力相助,同时我还想把最后写好的程序和心得供后来者学习,希望大家能一起进步,^_^
编写目的:
   编写发送短消息的动态链接库。短消息软件现在很流行,而且大家基本上都会用手机发短消息,如果将手机的数据线接入到电脑中,通过电脑来发短信的话,将会大大提高发短信的速度,更重要的是我们还可以对手机进行功能扩展,做成适合自己的东东。大家也可以直接拿他来开发有关短消息的软件,由于有源代码,你还可以灵活地改进功能,也可以对客户加以封装。(先编写Delphi版本的,大家以后有兴趣可以写java版本的)
使用资源:SPComm串口通信控件(API的难了点,这个比较方便哦^_^)很多地方都可以下载的哦
接口函数:
   InitService()----初始化服务
   SendMsg(Info:String); ----发送短消息
   RecvMsg():String; -------接收短消息
文件:
---------------------------------------
sms.dpr---DLL工程文件
smsInterface.pas---接口文件
CommService.pas -------串口发送接收服务文件
---------------------------------------
library sms;
uses
  ShareMem,
  SysUtils,
  Classes,
  smsInterface in 'smsInterface.pas',
  SPComm in 'SPComm.pas',
  CommService in 'CommService.pas';{$R *.res}
exports
  InitService,
  SendMsg,
  RecvMsg;
begin
end.
//-------------------------------------
//--- smsInterface.pas
//-------------------------------------
unit smsInterface;interface
uses
  ShareMem,
  SysUtils,
  Classes;procedure InitService();stdcall;
procedure SendMsg(Info:String);stdcall;
function RecvMsg():String;stdcall;implementation
//初始化服务
procedure InitService();
beginend;
//发送短消息
procedure SendMsg(Info:String);
begin
 //短消息编码,pduData:=PDUEcode(Info);
 end;
//接收短消息
function RecvMsg():String;
beginend;
///////////////////////////////////////////////
end.
//--------------------------------------------------
//--- CommService.pas
//--------------------------------------------------
unit CommService;interface
type
  TSMS=class(TObject)
    SCom:TComm;
    private
    {private declaration}
      FSend_Data:String;
      FRecv_Data:String;
      FPortReceQueue: array[0..50] of String; //接收数据队列
      procedure OpenComm();   //打开串口
      procedure InitModule(); //初始化TC35模块
      procedure SendData(Info:String); //向串口发送数据
      procedure SComReceData(Sender:TObject;Buffer:Pointer;BufferLength:Word);
    public
    {public declaration}
      constructor Create(Sender:TObject);
      destructor Destroy;override;      
  end;
var
  sms:TSMS; //?是否合理
  {----------}  
  procedure ExtractMsg(sMsg:String);
  function TextToPDU(sCenter,sPhone,sMsgBody:String): String;
  function PDUEncode(Info:WideString):String;
  function ConvertL2R(Msg:String):String;
implementation
constructor TSMS.Create(Sender:TObject);
begin
     Inherited Create;
     SCom:=TComm.Create(Application);
     SCom.OnReceiveData := SComReceData;
     OpenComm();
     InitModule();
end;{-----------向串口发送数据-------------------------------------}
procedure TSMS.SendData(Info:String);
var
  pDataToWrite:PChar;
  nTemp:Integer;
  dwSizeOfToWrite:Word;
begin
   //注意这个长度的测量,使用Length可能测出的长度比字符串的长度少1个
   pDataToWrite:=PChar(Info);
   nTemp:=Length(pDataToWrite);
   dwSizeOfToWrite:=nTemp;
   SCom.WriteCommData(pDataToWrite,dwSizeOfToWrite)
end;{-----------从串口接收数据-------------------------------------}
procedure TSMS.SComReceData(Sender:TObject;Buffer:Pointer;BufferLength:Word);
var
  rBuf: array of byte;
  RecvData:String;
  I:Integer;
begin
  RecvData:='';
  SetLength(rBuf,BufferLength);  
  move(Buffer^,PChar(rBuf),BufferLength); 
  for I:=0 to BufferLength-1 do
    RecvData:=RecvData+IntToHex(rbuf[i],2);
  //读取后应马上清空
  //将接收的数据存入数据接收队列中去
  i:=Length(FPortReceQueue);
  if i=50 then exit;
  FPortReceQueue[i]:=RecvData;
  
end;{-----------打开串口--------------------------------------------}
procedure TSMS.OpenComm();
begin
  SCom.CommName :='COM1';
  SCom.BaudRate :=9600;
  SCom.ByteSize :=_8;
  SCom.ParityCheck :=false;
  SCom.StopBits :=_1;
  SCom.StartComm ;
end;
{--------------初始化模块----------------------------------------}
procedure TSMS.InitModule();
var
  cmdAt:String;
begin
   //TC35 模块的初始化命令
   {初始化命令}  
  cmdAt:='.....'; //初始化命令
  SendData(cmdAt); //发送命令end;{----------------------------------------------------------------}
destructor TSMS.Destroy;
begin
  SCom.StopComm;end;   //--------------------------------------------------
//--- SPComm见控件源代码  
//---------------------------------------------------

解决方案 »

  1.   

    楼主,是通过电脑发还是通过手机发?
      

  2.   

    当然是通过电脑发了,俺的手掌很大,手指一接触手机就是同时按下好几个键哦,^_^
    收发短信都用电脑
      

  3.   

    除电脑之外,通过此发短讯还需要什么设备?手机及连线?????
      

  4.   

    很有兴趣可是最近没有时间,这个星期就要出差了,要进行全省的巡检啦!
      

  5.   

    不要做了,我已做烂了,没劲,你要我给你原程序都可以