【发布时间】:2013-08-21 15:48:37
【问题描述】:
我正在开发一个将由我的 EXE 加载的 DLL 文件...所以 EXE 将调用第一个 DLL 程序,当这个程序被加载时,我希望它保持打开状态,即使 EXE 被关闭。例如,我有一个带有计时器的 DLL,显示一条“Hello World”消息。 DLL 代码:
uses
SysUtils,
Classes,
Dialogs,
ExtCtrls;
{$R *.res}
type
TMyTimer = Class(TTimer)
public
procedure OnMyTimer(Sender: TObject);
end;
procedure DllMessage; export;
var
MyTimer: TMyTimer;
begin
MyTimer := TMyTimer.Create(nil);
MyTimer.Interval := 10000;
MyTimer.OnTimer := MyTimer.OnMyTimer;
end;
procedure TMyTimer.OnMyTimer(Sender: TObject);
begin
ShowMessage('Hello World');
end;
exports DllMessage;
begin
end.
EXE 是这样加载的:
procedure DllMessage; external 'Message.dll'
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
DllMessage;
end;
当我关闭 EXE 时,我希望 DLL 继续运行并每 10 秒显示一次消息...这可能吗?
【问题讨论】:
-
不是真正的重复,@Lloyd。这是一个XY问题。接受的答案解决的真正问题是如何避免 DLL 导致启动时间过长。将 DLL 保存在内存中只是如何实现这一目标的一个想法(无论如何,这甚至都行不通)。此外,this 的问题也不仅仅是将其保存在内存中,而是关于继续执行。
-
您是如何让计时器在 DLL 中工作的?因为 DLL 没有消息泵,而您的计时器依赖它...
-
@user1526124:如果您解释为什么 DllMessage 例程需要在 DLL 中,您可能会得到更同情的回应。
-
@Jerry 主持人抽队列