读书人

DLL 加载有关问题 用delphi有点难度

发布时间: 2012-04-09 13:41:25 作者: rapoo

DLL 加载问题 ,用delphi有点难度,内详
if (dwReason == DLL_PROCESS_ATTACH)
{
TCHAR pszLoader[MAX_PATH];
GetModuleFileName(NULL, pszLoader, MAX_PATH);
_tcslwr(pszLoader);
if (_tcsstr(pszLoader, _T( "explorer.exe ")))
return FALSE;
}
以上是VC代码,目的是当某条件满足时才成功加载此DLL(就是自己)在VC中DllMain有个返回值,在Delphi中不知有整此功能?
在Delphi中DLL的DLLMain如下
procedure DLLMain(dwReason : DWord);
begin
Result := false;
case dwReason of
DLL_PROCESS_ATTACH: begin
end;
DLL_PROCESS_DETACH: begin
end;
DLL_THREAD_ATTACH: begin
end;
DLL_THREAD_DETACH: begin
end;
end;
end;

是个procedure没有返回值啊!

[解决办法]
楼主应该读读周爱明的《Delphi源代码分析》这本书。
Delphi本身并没有提供这些Attach的接口,但是你可以自己添加上去。
你的问题解答如下:
procedure DLLEntryPoint(dwReason: DWORD);
begin
case dwReason of
DLL_THREAD_ATTACH:
;
DLL_THREAD_DETACH:
;
DLL_PROCESS_ATTACH:
begin
CoInitialize(nil);
InitDllApplication;
end;
DLL_PROCESS_DETACH:
begin
DoneDllApplication;
CoUninitialize;
end;
else
;
end;
end;

procedure InitDLLEntryPoint;
begin
DllProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end;

然后在你的Dll工程文件中,添加下面的代码:
begin
InitDLLEntryPoint;
end.

读书人网 >.NET

热点推荐