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