关于调用 dll 的回调函数封装到控件的事件?解决方案
关于调用 dll 的回调函数封装到控件的事件?
Dll 与 主程序正常调用的回调函数是这样的
主程序:
type
TMyCB = procedure(Cmd:TCmd;pData: Pointer;BmpData:Pointer;BmpDataSize:Integer);
procedure ReadCB(Cmd:TCmd;pData: Pointer;BmpData:Pointer;BmpDataSize:Integer);
begin
dll 返回
end;
SetMyCB(ReadCB) //把这个过程传给dll
以上都正常调用
现在我想写个控件
把 ReadCB 封装成事件,如何处理?
TBackMessageEvent = procedure(Cmd:TCmd;pData: Pointer;BmpData:Pointer;BmpDataSize:Integer) of object;
TWealsh = class(TWealshPNLS)
private
FBackMessage: TBackMessageEvent;
published
property OnBackMessage:TBackMessageEvent read FBackMessage write FBackMessage;
end;
SetMyCB(ReadCB) //这个过程应该不能写在TWealsh里?
------解决方案--------------------
你定义的类已经有属性了, 就不用再单独写SetMyCB(ReadCB)
下边的代码已测试通过
Dll 与 主程序正常调用的回调函数是这样的
主程序:
type
TMyCB = procedure(Cmd:TCmd;pData: Pointer;BmpData:Pointer;BmpDataSize:Integer);
procedure ReadCB(Cmd:TCmd;pData: Pointer;BmpData:Pointer;BmpDataSize:Integer);
begin
dll 返回
end;
SetMyCB(ReadCB) //把这个过程传给dll
以上都正常调用
现在我想写个控件
把 ReadCB 封装成事件,如何处理?
TBackMessageEvent = procedure(Cmd:TCmd;pData: Pointer;BmpData:Pointer;BmpDataSize:Integer) of object;
TWealsh = class(TWealshPNLS)
private
FBackMessage: TBackMessageEvent;
published
property OnBackMessage:TBackMessageEvent read FBackMessage write FBackMessage;
end;
SetMyCB(ReadCB) //这个过程应该不能写在TWealsh里?
------解决方案--------------------
你定义的类已经有属性了, 就不用再单独写SetMyCB(ReadCB)
下边的代码已测试通过
unit Unit13;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TCmd = class
end;
TBackMessageEvent = procedure(Cmd:TCmd;pData: Pointer;BmpData:Pointer;BmpDataSize:Integer) of object;
TWealsh = class
private
FBackMessage: TBackMessageEvent;
published
property OnBackMessage:TBackMessageEvent read FBackMessage write FBackMessage;
end;
TForm13 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure BackMessage(Cmd:TCmd;pData: Pointer;BmpData:Pointer;BmpDataSize:Integer);
public
{ Public declarations }
end;
var
Form13: TForm13;
implementation
{$R *.dfm}
procedure TForm13.BackMessage(Cmd: TCmd; pData, BmpData: Pointer; BmpDataSize: Integer);
begin
end;
procedure TForm13.FormCreate(Sender: TObject);
var
a : TWealsh;
begin
a.OnBackMessage := BackMessage;
end;
end.