读书人

动态库中给SPComm.OnReceiveData事件赋

发布时间: 2012-10-18 13:46:55 作者: rapoo

动态库中给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;
[解决办法]
简单试了下,不知道你要的是不是这样,一种方法是定义在自己的类里,一种是定义在另外的一个类里:

Delphi(Pascal) code
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.
[解决办法]
恭喜啦。。
[解决办法]
先问一下 串口打开了吗

读书人网 >.NET

热点推荐