建了一个用来发短信的类,可是运行时总是报错,大家帮忙看看!
unit Msgsender;
interface
uses
Windows, SysUtils, Classes, Variants, Messages, Dialogs,
MSCommLib_TLB, ExtCtrls;
Type
TMsgSender=Class(Tobject)
F_MSCOM:TMSComm;
F_Tm:TTimer;
procedure F_TmTimer(Sender: TObject);
procedure F_MSCOMComm(Sender: TObject);
private
F_ComInputNotNull:Boolean;
F_ComTime:integer;
F_Port:integer;
F_Msg:string;
F_Phon:string;
procedure CloseCOM();
procedure OpenCOm();
public
constructor Create();
procedure Open();
procedure Sender();
procedure Close();
published
property Port:integer read F_Port write F_Port default 1;
property Msg:string read F_Msg write F_Msg;
property Phon:string read F_Phon write F_Phon;
end;
implementation
procedure TMsgSender.CloseCOM();
begin
If F_MSCOM.PortOpen Then
F_MSCOM.PortOpen:=false;
end;
procedure TMsgSender.OpenCOm();
begin
If F_MSCOM.PortOpen Then
F_MSCOM.PortOpen:=false;
F_MSCOM.CommPort:=F_Port;
try
F_MSCOM.PortOpen:=true;
except
showmessage('无法打开端口,请检测!');
end;
end;
constructor TMsgSender.Create();
begin
end;
procedure TMsgSender.Open();
begin
//F_MSCOM:=TMSComm.create();
//F_Tm:=TTimer.Create(self);
F_ComInputNotNull:=false;
F_ComTime:=0;
F_Port:=1;
F_Msg:='';
F_Phon:='';
CloseCOM;
F_MSCOM.Handshaking:=3-comRTSXOnXOff;
F_MSCOM.RThreshold:=1;
F_Tm.Enabled:=false;
F_Tm.Interval:=30;
end;
procedure TMsgSender.F_TmTimer(Sender:TObject);
begin
If F_ComTime<500 Then
begin
If F_MSCOM.Input<>'' Then
F_ComInputNotNull:=True;
F_ComTime:=F_ComTime+1;
end
Else
begin
F_Tm.Enabled:=false;
F_ComTime :=0;
If not(F_ComInputNotNull) Then
showmessage('发送不成功,请检查设备!');
F_ComInputNotNull:=false;
end;
end;
procedure TMsgSender.F_MSCOMComm(Sender: TObject);
var
s:string;
si:integer;
begin
s:=F_MSCOM.Input;
If s<>'' Then
Begin
F_ComInputNotNull:=True;
si := Pos('>',s);
If si>0 Then
F_MSCOM.Output:=F_Msg+chr(26);
si := pos('ERROR',s);
If si>0 then
begin
F_MSCOM.InBufferCount:=0;
F_MSCOM.OutBufferCount:=0;
showmessage('发送不成功,请检测设备及SIM卡!');
end;
End;
end;
procedure TMsgSender.Sender();
var
s:string;
begin
s:=trim(F_Msg);
If s='' Then
showmessage('缺少发送方号码!')
Else
begin
OpenCOM();
If F_MSCOM.PortOpen Then
Begin
F_Tm.Enabled:=true;
F_MSCOM.Output:='at+cmgs="'+s+'"';
sleep(20);
F_MSCOM.Output:=chr(13);
end;
end;
end;
procedure TMsgSender.Close();
begin
F_Tm.Enabled:=false;
CloseCOM();
end;
end.
//==============================================
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Msgsender, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
MySender: TMsgSender;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
MySender:=TMsgSender.Create();
mysender.Open;
MySender.Port:=1;
MySender.Phon:=edit2.Text;
MySender.Msg:=edit1.Text;
MySender.Sender;
// MySender.Close;
end;
end.
//=================================
只用到MSCOMM控件
运行时报:
Access violation at address 0045B840 in module 'project.exe'.Read of address 00000220.