我的软件使用一个 DLL,它是由一个 INI 文件配置的。它获取第一个具有特定名称的名称(如果重要,则为 Bemafi32.ini),它可以在系统路径中找到。
我想在我的软件中添加编辑此文件的功能。如果我的系统有两个或多个同名文件(这是非常非常常见的),我不想弄错一个。我如何保证获得正确的文件?
我的软件使用一个 DLL,它是由一个 INI 文件配置的。它获取第一个具有特定名称的名称(如果重要,则为 Bemafi32.ini),它可以在系统路径中找到。
我想在我的软件中添加编辑此文件的功能。如果我的系统有两个或多个同名文件(这是非常非常常见的),我不想弄错一个。我如何保证获得正确的文件?
要找到路径上的第一个 INI 文件,然后使用另一个答案和。DLL 更有可能使用与自身位于同一目录中的 INI 文件,而不是路径上的第一个文件。否则, DLL 的所有副本将使用相同的INI 文件,因为所有进程的路径通常相同。FileSearch
GetEnvironmentVariable
要在与 DLL 相同的目录中获取 INI 文件,您需要知道 DLL 在哪里,这可能需要知道您将加载哪个 DLL 副本。这不是最容易弄清楚的事情,因此您可以将负担转移到操作系统:
LoadLibrary
。操作系统将使用其正常的搜索算法来查找 DLL。GetModuleFileName
以找出您加载的 DLL 的路径。(如果您的程序已经加载了 DLL,因为它使用了 DLL,那么您可以调用GetModuleHandle
而不是LoadLibrary
.)
@user539484,我想你的评论可能是一个更好的答案......
没问题,我可以将其作为答案,但只有当您真正确定您的 DLL 的行为与您在问题中描述的完全一样时,这才是一个解决方案。请记住,DLL 搜索策略比仅在PATH
.
var
IniPathName: TFileName;
begin
IniPathName := FileSearch('Bemafi32.ini', GetEnvironmentVariable('PATH')); { do not localize }
Assert(IniPathName <> '', 'Unable to locate file');
{ ... }