我正在開發一個將由我的EXE加載的DLL文件...因此,EXE將調用第一個DLL過程,並且在此過程得到加載時,我想保持其打開狀態,即使EXE會關閉。例如,我有一個帶有定時器的DLL,顯示'Hello World'消息。 DLL代碼:即使在進程關閉的情況下仍然維持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保存在內存中只是一個想法,即如何實現這一點(無論如何,這甚至不起作用)。此外,*這個問題不僅僅是將它保存在內存中,而是關於繼續*執行*。 –
你是如何使定時器在DLL內工作的?由於DLL沒有消息泵,因此您的計時器依賴於... –
@ user1526124:如果解釋爲什麼DllMessage例程需要位於DLL中,您可能會得到更多的同情迴應。 – MartynA