十万火急-----Delphi 2006 将 CPort3 封装进 DLL 的后续问题
红色部分改动后,原来的E2009 Incompatible types : 'method pointer and regular procedure' 错误提示没了,可串口接收事件根本不激活。即使定时查询串口也读不到任何数据。
部分主要代码,贴出如下:
为什么?请各位高手帮帮忙。谢谢。
分数有限,只能将所有分都拿出来了,别嫌少。
library ComPortDLL;
uses
ShareMem, SysUtils, CPort, Windows, Classes;
type
TABC=class(TComponent)
procedure CommPortRxChar(Sender:TObject; Count: Integer);
end;
{$R *.res}
var
ABC : TABC;
CommPort : TComPort;
DataReadFromCommPort : string;
procedure TABC.CommPortRxChar(Sender: TObject; Count: Integer);
var ByteReaded,temp : integer;
strReaded : String;
begin
ByteReaded := CommPort.ReadStr(strReaded,count);
DataReadFromCommPort := DataReadFromCommPort+strReaded;
while ByteReaded<Count do begin
temp := CommPort.ReadStr(strReaded,Count-ByteReaded);
if temp>0 then begin
ByteReaded := ByteReaded + temp;
DataReadFromCommPort := DataReadFromCommPort+strReaded;
end;
end;
end;
procedure InitStatus();
begin
DataReadFromCommPort := '';
end;
//打开串口
function OpenSerialPort(uPort, tBaudRate : integer) : boolean; stdcall;
begin
if (CommPort<>nil) then begin
CommPort.Close;
CommPort.Destroy;
end;
CommPort := TComPort.Create(nil);
CommPort.Port := 'COM'+IntToStr(uPort);
case tBaudRate of
0: CommPort.BaudRate := br300;
1: CommPort.BaudRate := br600;
2: CommPort.BaudRate := br1200;
3: CommPort.BaudRate := br2400;
4: CommPort.BaudRate := br4800;
5: CommPort.BaudRate := br9600;
6: CommPort.BaudRate := br14400;
7: CommPort.BaudRate := br19200;
8: CommPort.BaudRate := br38400;
9: CommPort.BaudRate := br56000;
10: CommPort.BaudRate := br57600;
11: CommPort.BaudRate := br115200;
end;
CommPort.DataBits := dbEight;
CommPort.StopBits := sbOneStopBit;
CommPort.SyncMethod := smWindowSync;
CommPort.OnRxChar := ABC.CommPortRxChar;
CommPort.Open;
Result := CommPort.Connected;
end;
//关闭串口
procedure StopCom(); stdcall;
begin
if (CommPort<>nil) then begin
CommPort.Close;
CommPort.Destroy;
end;
CommPort := nil;
end;
//发送 AT 指令
function SendComCommand(sendStr : String) : integer; stdcall;
begin
Result := 0;
if ((CommPort.Connected) and (sendStr<>'')) then begin
Result := CommPort.WriteStr(sendStr+#$D);
end;
end;
Exports
OpenSerialPort, StopCom, SendComCommand;
begin
InitStatus;
ABC := TABC.Create(nil);
end.