怎样取得DLL文件所在位置?(50分)

  • 主题发起人 主题发起人 amourz
  • 开始时间 开始时间
A

amourz

Unregistered / Unconfirmed
GUEST, unregistred user!
extractfilepath(application.exename)对DLL无效。用extractfilepath('xxx.dll')取出的
是空值。我怎么才能取得DLL的所在目录呢?
 
用extractfilepath(paramstr(0))有效
 
FUNCTION FkGetDllFile():STRING;
VAR bTemp:PCHAR;
BEGIN
bTemp:=PCHAR(AllocMem(1024+1))
GetModuleFileName(0,bTemp,1024);
Result:=STRING(bTemp);
FreeMem(bTemp);
END;

用 ExtractFilePath(FkGetDllFile());
 

程序执行时是动态查找 DLL文件的。
首先在 system 目录下找,
然后在 windows 目录下找
最后在 程序执行目录中找。
你也可以按这种顺序来判断是否有相应的文件。

控件类的 DLL 应该在注册表中找。
 
function ReadDLLPath : String;
var
DLLPath : String;
FN: array[0..MAX_PATH- 1] of char;
begin
SetString(DLLPath, FN, GetModuleFileName(hInstance, FN, SizeOf(FN)));
DLLPath := ExtractFileDir(DLLPath);
if Copy(DLLPath,Length(DLlPath),1) <> '/' then
DLLPath := DLLPath+'/';
Result := DLLPath;
end;
 
提供一下思路:
getmodulefilename是dll宿主得文件名
再ExtractFileDir(上面得返回值)就可以了
 
多人接受答案了。
 
后退
顶部