DLL 的高手请进来(100分)

  • 主题发起人 主题发起人 barry1999
  • 开始时间 开始时间
B

barry1999

Unregistered / Unconfirmed
GUEST, unregistred user!
我在开发一个IE的扩展时,写了一个DLL截取IE的消息,也就是BROWSER HELPER OBJECT。
但是系统默认IE或EXPLORER每次启动是都会调用BHO,但我不想EXPLORER要调用它.
查了一下资料,MSDN里说DLL有一个入口函数DLLMAIN,只要让他返回FALSE就可以达到目的
但是DELPHI里却没这个函数,它用了一个DLLPROC的指针指向一个过程。我用它却不能达到
目的。代码如下
library IEControl;

uses
ComServ, Dialogs,windows,
_IEControl in '_IEControl.pas';
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;

procedure DLLEntryPoint(dwReason:Dword);
var
count: Integer;
buf: array[0..128] of char;
S: string;
begin
GetModuleFilename(NULL, @buf, SizeOf(buf)); // treats @buf as a PChar
S := buf;
if S='EXPLORER.EXE' then
//不会写了,应该卸载这个DLL
end;

begin
DllProc:=@DllEntryPoint;
end.
各位帮帮忙。


 
关注啊!分不够再加。[:D]
 
http://www.intelligo.net/
 
继续啊!
 
要想在载入dll时调用DLLEntryPoint,改成这样:
begin
DllProc:=@DllEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end

至于如何防止装载dll,我也想知道[:D][:D]
 
Try this please;

units MyDLL;

interface

uses Windows, Messages, SysUtils,...;

procedure MyDLLHandler(Reason: Integer); // this procedure for your dll myproc

implementation

{ something in this ....}


procedure MyDLLHandler(Reason: Integer);
begin
case Reason of
DLL_PROCESS_ATTACH:
{ do something on Dll Attach; ex. Load};
{ Example ShowMessage('Hello')}
DLL_PROCESS_DETACH:
{un load dll, do something};
{ Example ShowMessage('Quit')}
DLL_THREAD_ATTACH:;
DLL_THREAD_DETACH:;
end;
end;


begin
DLLProc := @MyDLLHandler;
MyDLLHandler(DLL_PROCESS_ATTACH);
end.




 
在begin……end之间(初始化代码)里面写
ExitCode := 一个非0的整数 ;
dll就不能装载
 
后退
顶部