关于网友提出的“ 急,关于回调问题,见内容,谢谢”问题疑问,本网通过在网上对“ 急,关于回调问题,见内容,谢谢”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 急,关于回调问题,见内容,谢谢描述:
我想做个DLL里面有个TTimer空间 有OnTimer 事件
程序调用DLL并且响应DLLOnTimer 事件
有哪位大哥给个例子,谢谢
解决方案1:
unit UntMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TDLLInvokFun = function : TTimer;
TForm1 = class(TForm)
lbl1: TLabel;
btn1: TButton;
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FTestTime : TTimer;
FDLLHandle : THandle;
procedure TestTimerEvents(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.TestTimerEvents(Sender: TObject);
begin
lbl1.Caption := DateTimeToStr(Now);
end;
procedure TForm1.btn1Click(Sender: TObject);
var
tmpFileName : string;
tmpFun : TDLLInvokFun;
begin
if FDLLHandle = 0 then begin
tmpFileName := ExtractFilePath(Application.ExeName) + 'TestDll.dll';
FDLLHandle := LoadLibrary(PChar(tmpFileName));
end;
tmpFun := GetProcAddress(FDLLHandle,'GetTimer');
FTestTime := tmpFun();
FTestTime.OnTimer := TestTimerEvents;
FTestTime.Enabled := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FDLLHandle := 0;
end;
end.
*****************************************************************
unit UntTestData;
interface
uses
SysUtils, Classes, ExtCtrls;
type
TdmTestData = class(TDataModule)
Timer1: TTimer;
private
{ Private declarations }
public
{ Public declarations }
end;
var
dmTestData: TdmTestData;
function GetTimer : TTimer;
implementation
function GetTimer : TTimer;
begin
if not Assigned(dmTestData) then begin
dmTestData := TdmTestData.Create(nil);
end;
Result := dmTestData.Timer1;
end;
{$R *.dfm}
end.