繁体   English   中英

LoadLibrary()与dll的相对地址

[英]LoadLibrary() relative address to dll

我试图在我的代码中加载一个DLL在Windows中,我用LoadLibrary()函数成功加载我的DLL但我有一个问题,我给我的dll的路径像:

LoadLibrary(C:\\path\\to\\my\\dll);

我想知道我是否可以给出我的dll的相对路径。 我的意思是例如:

LoadLibrary(.\my dll directory\my dll.dll)

可能吗? 如果没有,我如何开发我的项目,它可以移植而不改变不同机器中的DLL的路径?

它很可能失败,因为你在第二次调用LoadLibrary时忘了逃避反斜杠。 写问题时,这可能是一个错字,因为你也忘记了文件名的引号。 ;)也就是说,改变这一行:

LoadLibrary(.\my dll directory\my dll.dll);

为此:

LoadLibrary(L".\\my dll directory\\my dll.dll");

(而且我不确定是否需要领先.\\\\

如果这不能解决问题,那么这很可能会满足您的需求:

wchar_t szFullPath[MAX_PATH] = {};
GetCurrentDirectory(MAX_PATH, szFullPath);
PathCchAppend(szFullPath, MAX_PATH, L"my dll directory\\my dll.dll");
HMODULE hDLL = LoadLibrary(szFullPath);

最后,LoadLibrary具有不同的搜索依赖DLL的行为。 它根据您指定路径的方式而有所不同。 这可能会影响您从相对搜索路径加载DLL的能力。 阅读它上面的MSDN页面并考虑查看各种选项调用,如LoadLibraryExSetDllDirectory可以使搜索路径更容易处理。 这个页面也在DLL搜索路径上。

首先,我假设您打算写:

LoadLibrary(".\\my dll directory\\my dll.dll");

文档回答了您的问题:

如果指定了相对路径,则整个相对路径将附加到DLL搜索路径列表中的每个标记。 要从相对路径加载模块而不搜索任何其他路径,请使用GetFullPathName获取非相对路径并使用非相对路径调用LoadLibrary。

所以是的,您可以指定相对路径。 但它的解释方式可能不是你所期待的。 DLL搜索将依次获取DLL搜索路径中的每个路径,将其与您的相对路径组合,并尝试加载该DLL。

因此,如果您希望相对路径相对于当前工作目录,请调用GetFullPathName将其扩展为绝对路径,然后加载该路径。 如果希望相对路径相对于其他目录进行解释,则与该目录组合并使用绝对路径加载DLL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM