LoadLibrary()的相对地址为dll

我想在我的代码在Windows中加载DLL,我用LoadLibrary()函数成功加载我的DLL,但我有一个问题,我给我的DLL的path如:

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

我不知道是否可以给我的DLL的相对path。 我的意思是例如:

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

可能吗? 如果没有,我怎样才能开发我的项目,它可以是便携式的,而不改变在不同的机器上的DLL的path?

Solutions Collecting From Web of "LoadLibrary()的相对地址为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页面,并考虑查看各种选项调用,如LoadLibraryEx和SetDllDirectory可以使搜索路径更容易处理。 此页面也在DLL搜索路径中。

首先,我假定你打算写:

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

文档回答你的问题:

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

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

因此,如果您希望相对路径与当前工作目录相关,请调用GetFullPathName将其展开为绝对路径,然后加载该路径。 如果你想要相对路径被解释为相对于其他目录,那么结合该目录并加载一个绝对路径的DLL。