如果我致电LoadLibrary("foo.dll")
,它会查看系统上的不同位置,选择最佳匹配,然后加载该库。我希望在实际加载之前找到此文件的完整路径。有一个简单的方法吗?我的google-fu到目前为止都没有让我失望,但似乎很直观,有一些功能可以做到这一点。我目前的解决方案是实际使用LoadLibraryEx
标记调用LOAD_LIBRARY_AS_DATAFILE
,然后在结果上调用GetModuleFileName
;在此之后,我假设我必须释放库并在没有此标志的情况下重新加载它,但这看起来像是一种迂回方法。有没有更好的办法?或许ResolvePathFromDllName
?
答案 0 :(得分:2)
您可以使用SearchPath
,但如果您计划稍后实际调用LoadLibrary
,则不建议这样做(请参阅链接页面上的Remarks
部分(并在此答案中引用) )关于可能返回错误的结果)。
另请注意,搜索顺序与LoadLibrary
的搜索顺序略有不同,因为它在LoadLibrary
中记录的搜索开始时没有做出相同的假设。它严格搜索PATH
,因为它的文档说明了它;它不会自动首先在同一个文件夹中查找。请参阅Remarks
中的段落:
如果输出的预期用途是调用LoadLibrary函数,则不建议使用 SearchPath 函数作为查找.dll文件的方法。这可能导致找到错误的.dll文件,因为 SearchPath 功能的搜索顺序与 LoadLibrary 功能使用的搜索顺序不同。如果需要查找并加载.dll文件,请使用 LoadLibrary 功能。
因此,对这个问题的正确答案是首先使用LoadLibrary
(就像你一样),以确保你找到了稍后要加载的同一个DLL。