我是这么做的,我先弄了个unit1.pas文件,专门用于打开、关闭、发送、接收串口的。然后在 DLL 中 调用unit1.pas文件实现串口的 DLL,以便其他程序使用。
在unit1.pas文件中这么定义Tcomm的。
uses
SysUtils, Classes, Windows, Dialogs, SPCOMM;
type
TMyComm=class(TComm)
public
procedure MyReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
end;
var
mycomm:TMyComm;
backmsg:string;implementation
procedure TMyComm.MyReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var
pStr:PChar;
begin
pStr:= Buffer;
backmsg:=string(pStr);
showmessage(backmsg);
end;initialization //初始化
mycomm:=Tmycomm.Create(nil);
mycomm.OnReceiveData:=mycomm.MyReceiveData;
finalization //释放
mycomm.Free;end; 打开串口、发送数据搜是可以的,就是接收不是很正常。
假设我每发一个字符串,就会返回一个‘OK’,比如我程序中就发一个‘AT’,能返回一个‘OK’,但是当我发了‘AT’连着发了‘B’,那么只会等‘B’也发完才返回两个‘OK’,断电调试的时候,只发完‘A’是没有数据返回的。请问这是怎么回事。
在unit1.pas文件中这么定义Tcomm的。
uses
SysUtils, Classes, Windows, Dialogs, SPCOMM;
type
TMyComm=class(TComm)
public
procedure MyReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
end;
var
mycomm:TMyComm;
backmsg:string;implementation
procedure TMyComm.MyReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var
pStr:PChar;
begin
pStr:= Buffer;
backmsg:=string(pStr);
showmessage(backmsg);
end;initialization //初始化
mycomm:=Tmycomm.Create(nil);
mycomm.OnReceiveData:=mycomm.MyReceiveData;
finalization //释放
mycomm.Free;end; 打开串口、发送数据搜是可以的,就是接收不是很正常。
假设我每发一个字符串,就会返回一个‘OK’,比如我程序中就发一个‘AT’,能返回一个‘OK’,但是当我发了‘AT’连着发了‘B’,那么只会等‘B’也发完才返回两个‘OK’,断电调试的时候,只发完‘A’是没有数据返回的。请问这是怎么回事。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货