如何在不实际调用LoadLibrary的情况下找到DLL的完整路径?

时间:2013-07-18 02:00:34

标签: windows dll

如果我致电LoadLibrary("foo.dll"),它会查看系统上的不同位置,选择最佳匹配,然后加载该库。我希望在实际加载之前找到此文件的完整路径。有一个简单的方法吗?我的google-fu到目前为止都没有让我失望,但似乎很直观,有一些功能可以做到这一点。我目前的解决方案是实际使用LoadLibraryEx标记调用LOAD_LIBRARY_AS_DATAFILE,然后在结果上调用GetModuleFileName;在此之后,我假设我必须释放库并在没有此标志的情况下重新加载它,但这看起来像是一种迂回方法。有没有更好的办法?或许ResolvePathFromDllName

1 个答案:

答案 0 :(得分:2)

您可以使用SearchPath,但如果您计划稍后实际调用LoadLibrary,则不建议这样做(请参阅链接页面上的Remarks部分(并在此答案中引用) )关于可能返回错误的结果)。

另请注意,搜索顺序与LoadLibrary的搜索顺序略有不同,因为它在LoadLibrary中记录的搜索开始时没有做出相同的假设。它严格搜索PATH,因为它的文档说明了它;它不会自动首先在同一个文件夹中查找。请参阅Remarks中的段落:

  

如果输出的预期用途是调用LoadLibrary函数,则不建议使用 SearchPath 函数作为查找.dll文件的方法。这可能导致找到错误的.dll文件,因为 SearchPath 功能的搜索顺序与 LoadLibrary 功能使用的搜索顺序不同。如果需要查找并加载.dll文件,请使用 LoadLibrary 功能。

因此,对这个问题的正确答案是首先使用LoadLibrary(就像你一样),以确保你找到了稍后要加载的同一个DLL。