编写发送短消息的动态链接库来学习Delphi,大家互相交流学习
本人是Delphi初学者,想找个东东学习一下Delphi,容易的没什么意思,难的又吃不消,最后决定拿:编写发送短消息的动态链接库来作为练
习的材料,希望想学习Delphi的程序员加入一起学习,也希望各位高手能鼎力相助,同时我还想把最后写好的程序和心得供后来者学习,希望
大家能一起进步,^_^
编写目的:
编写发送短消息的动态链接库。短消息软件现在很流行,而且大家基本上都会用手机发短消息,如果将手机的数据线接入到电脑中,通过电
脑来发短信的话,将会大大提高发短信的速度,更重要的是我们还可以对手机进行功能扩展,做成适合自己的东东。大家也可以直接拿他来开
发有关短消息的软件,由于有源代码,你还可以灵活地改进功能,也可以对客户加以封装。(先编写Delphi版本的,大家以后有兴趣可以写jav
a版本的)
使用资源: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();
begin
end;
//发送短消息
procedure SendMsg(Info:String);
begin
//短消息编码,pduData:=PDUEcode(Info);
end;
//接收短消息
function RecvMsg():String;
begin
end;
///////////////////////////////////////////////
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见控件源代码
//---------------------------------------------------