首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-04-09 
DLL 加载问题 ,用delphi有点难度,内详if(dwReasonDLL_PROCESS_ATTACH){TCHARpszLoader[MAX_PATH]GetMod

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.

热点排行