我的软件使用DLL,它由INI文件配置。它获得了第一个具有特定名称(如果重要的话,Bemafi32.ini),它可以在系统路径中找到。
我想在我的软件中添加编辑此文件的功能。如果我的系统有2个或更多具有相同名称的文件(非常非常普通),我不想错误。我怎样才能确保获得正确的文件?
答案 0 :(得分:5)
要查找路径中的第一个INI文件,请将the other answer与FileSearch
和GetEnvironmentVariable
一起使用。 DLL更可能使用与自身位于同一目录中的INI文件,而不是路径中的第一个。否则,所有副本的DLL将使用相同的 INI文件,因为所有进程的路径通常是相同的。
要将INI文件放在与DLL相同的目录中,您需要知道DLL的位置,并且可能需要知道要加载的DLL的哪个副本。这不是最容易弄明白的事情,因此您可以将负担转移到操作系统:
LoadLibrary
自行加载DLL。操作系统将使用其常规搜索算法来查找DLL。GetModuleFileName
以找出您加载的DLL的路径。(如果您的程序已经加载了DLL,因为它使用 DLL,那么您可以调用GetModuleHandle
而不是LoadLibrary
。)
答案 1 :(得分:4)
@ user539484,我猜你的评论最好能回答......
没问题,我可以将其作为答案,但只有当您确定您的DLL的行为与您在问题中描述的完全一致时,它才会是解决方案 。请记住,DLL search strategy比在PATH
中找到第一个匹配文件要复杂得多。
var
IniPathName: TFileName;
begin
IniPathName := FileSearch('Bemafi32.ini', GetEnvironmentVariable('PATH')); { do not localize }
Assert(IniPathName <> '', 'Unable to locate file');
{ ... }