DLL窗体的应用问题,有人会吗? ( 积分: 200 )

  • 主题发起人 主题发起人 gdtkd
  • 开始时间 开始时间
G

gdtkd

Unregistered / Unconfirmed
GUEST, unregistred user!
我把原来的一个监控程序做成一个DLL窗体,是负责写主程序的数据库操作日志的。但是,做成DLL后,在主程序中载入后,运行时DLL是可以做到监控功能,但是主程序一但关闭,DLL也即时关闭,没有程序的最后的一部份做操作处理。
  我如何才能使DLL程序,在主程序关闭后,处理完毕所有工作后,自己才关闭。谢谢!
library sInfo;

uses
SysUtils,
Classes,
ComObj,
SystemCheck in 'SystemCheck.pas' {SerChk};

{$R *.res}
Procedure RUNSERVICE;
Begin
SerCCk := TSerCCk.Create(NIL);
SerCCk.Timer1.Interval := 1000;
SerCCk.Timer2.Interval := 2000;
SerCCk.Timer1.Enabled := True;
//SerCCk.Timer2.Enabled := True;
//SerCCk.Show;
End;

EXPORTS
RUNSERVICE;
begin
end.

代码就只有这么多,本身也是一个可以运行的程序,如果是一个单独的EXE,是没有问题的,请问EXPORT应该怎样写才对!
 
我把原来的一个监控程序做成一个DLL窗体,是负责写主程序的数据库操作日志的。但是,做成DLL后,在主程序中载入后,运行时DLL是可以做到监控功能,但是主程序一但关闭,DLL也即时关闭,没有程序的最后的一部份做操作处理。
  我如何才能使DLL程序,在主程序关闭后,处理完毕所有工作后,自己才关闭。谢谢!
library sInfo;

uses
SysUtils,
Classes,
ComObj,
SystemCheck in 'SystemCheck.pas' {SerChk};

{$R *.res}
Procedure RUNSERVICE;
Begin
SerCCk := TSerCCk.Create(NIL);
SerCCk.Timer1.Interval := 1000;
SerCCk.Timer2.Interval := 2000;
SerCCk.Timer1.Enabled := True;
//SerCCk.Timer2.Enabled := True;
//SerCCk.Show;
End;

EXPORTS
RUNSERVICE;
begin
end.

代码就只有这么多,本身也是一个可以运行的程序,如果是一个单独的EXE,是没有问题的,请问EXPORT应该怎样写才对!
 
怎么看楼主描述的那么像病毒啊。。。。由主程序启动,然后调用dll,然后主进程自杀留下dll来运行。。。。。。

主进程关了dll也会被关的,因为他是属于你的主进程的一部分,除非你像病毒那样把dll注入另一个进程内
 
使用消息hook植入到系统进程中,然后设一个timer(用api)来唤醒自己
 
晕,对这个真的不熟悉,请问怎样才能做到以上要求啊?
 
win2K有dllhost进程,应该可以注入到它里面,不过具体没做过,可以看看MSDN
 
gdtkd,
如果你只是想“在主程序关闭后,处理完毕所有工作后,自己才关闭”,那很简单,没必要使用很高深的技术去把它做成一个“病毒”。

你只需要在你的单元文件中添加Finalization部分,然后在Finalization部分中写上你的代码就行,这些代码会在dll关闭之前执行。
同样的道理,你也可以在单元的Initialization部分写代码来进行一些dll的初始化工作。
 
谢谢!问题解决了,就是younghat的方法!younghat又放钱进我口袋,小弟谢谢了!
 
后退
顶部