又是一初级问题,得分的好机会(50分)

  • 主题发起人 主题发起人 xiaowind
  • 开始时间 开始时间
X

xiaowind

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在dll中获得dll的目录?
 
ExtractFilePath('xxx.dll');
Application.ExeName不管用
 
如果不用到dll文件名称,有没有好的办法?(我是在dll中要得到自己的目录)
 
其它的方法我试过,但不行.
 
本来我也不知道的,但是看了一下Delphi源代码,
System.Pas中ParamStr函数部分,如下:

begin
if Index = 0 then
SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer)))
......
end;

于是得到结论GetModuleFileName

Win32 文档中说明如下:

GetModuleFileName函数获取包含指定模块的可执行文件的完整路径和文件名。

Windows 95: 当应用程序版本号高于4.0并且长文件名有效时,
GetModuleFilename函数返回长文件名. 否则返回8.3格式的文件名。

DWORD GetModuleFileName(
HMODULE hModule, // 模块句柄
LPTSTR lpFilename, // 缓冲区指针
DWORD nSize // 缓冲区大小
);


参数
hModule
指定需要获取可执行文件名的模块. 如果为Null, GetModuleFileName
返回创建调用本函数的进程的文件名.

lpFilename
指定存放返回文件名的缓冲区。

nSize
指定缓冲区大小


在Delphi中
使用如下:
var
Buffer: array[0..260] of Char;
begin
....
GetModuleFileName(0, Buffer, SizeOf(Buffer))
...
end;
 
李颖的方法试过了,不行
GetModuleFileName(0, Buffer, SizeOf(Buffer)) 取得的是exe的目录.

想不到此问题这么难,50分是不是太少了?
 
把上面的代码做成独立的function
然后在DLL中调用试试
 
to 李颖: 还是不行:(
 
>GetModuleFileName(0, Buffer, SizeOf(Buffer)) 取得的是exe的目录.
这里不能用0作为HModule,应该用:
GetMoudleHandle('yourdll.dll')
 
lhz说的有道理,
但如果DLL被Rename呢?

Win32 Help说明如下:

HMODULE GetModuleHandle(
LPCTSTR lpModuleName //address of module name to return handle for
);

If this parameter is NULL, GetModuleHandle returns a handle of the file used to create the calling process.

试试看用
GetModuleHandle(Nil)得到的是DLL的Handle还是Exe的Handle

如果是DLL的Handle就一切都解决了。
 
>GetModuleHandle(Nil)得到的是DLL的Handle还是Exe的Handle
肯定得到的是是EXE的HANDLE.
>但如果DLL被Rename呢?
这有甚麽关系吗?如果不放心,可以用
LoadLibrary(),在用完后FreeLibrary().
 
问题是,我想在不知道dll名称的前提下取得dll的目录
 
不知道,我真不知道,怎么不知道dll名称的前提下取得dll的目录
谁知道告诉我!
 
D4兄不要讽刺人嘛!:-O
我是要在dll中取得本dll的目录,因为dll中有些函数要用到当前目录下的配置文件.
 
自己的DLL都不知道是甚麽名字,我更搞不懂了!
你可以用DLL的内部名,那样的话即使改了DLL文件的名字,
用GetModuleHandle()也可以得到正确的值.
 
如何取得DLL的内部名?
 
xiaowind:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者采取必要处理措施。
关于本版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
多人接受答案了。
 
后退
顶部