动态库中给SPComm.OnReceiveData事件赋值错误
原代码如下:
unit uComm;
interface
uses SPComm;
var
gComm: TComm;
bufRece, bufSend: array[0..255] of Byte;
// 就是想给gComm.OnReceiveData事件赋值的函数定义
procedure DoReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
function ComOpen(AComName: string; ABaudRate: LongInt): LongInt; stdcall;
implementation
// 就是想给gComm.OnReceiveData事件赋值的函数内容
procedure DoReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
Move(Buffer^, bufRece, BufferLength);
end;
function ComOpen(AComName: string; ABaudRate: LongInt): LongInt;
begin
if gComm <> nil then
begin
gComm.StopComm;
gComm.Free;
end;
gComm := TComm.Create(nil);
gComm.CommName := 'COM3';
gComm.BaudRate := 115200;
gComm.OnReceiveData := DoReceiveData;
gComm.StartComm;
Result := 1;
end;
在调用“gComm.OnReceiveData := DoReceiveData;”时程序出错了,
我根据以往的记忆,应该是这个DoReceiveData函数定义不对的。
请高手告诉问题如何解决?
谢谢!
[解决办法]
procedure DoReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
这个要定义在对象里吧,或者这样:
Type
TMyRece = procedure DoReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word) of Tobject
[解决办法]
错了,这样
Type
TMyRece = procedure(Sender: TObject; Buffer: Pointer; BufferLength: Word) of Object;
[解决办法]
简单试了下,不知道你要的是不是这样,一种方法是定义在自己的类里,一种是定义在另外的一个类里:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TMyEventClass = class class procedure BtnClickEvent(Sender:TObject); end;type TForm1 = class(TForm) btn1: TButton; procedure FormCreate(Sender: TObject); private { Private declarations } procedure MyBtnClick(Sender:TObject); public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.MyBtnClick(Sender: TObject);begin ShowMessage('Hello');end;procedure TForm1.FormCreate(Sender: TObject);begin btn1.OnClick:=MyBtnClick; btn1.OnClick:=TMyEventClass.BtnClickEvent;end;{ TMyEventClass }class procedure TMyEventClass.BtnClickEvent(Sender: TObject);begin ShowMessage('Click the Button!');end;end.
[解决办法]
恭喜啦。。
[解决办法]
先问一下 串口打开了吗