我主要是一名 .net 开发人员,用 C++ 做一些小事,所以我遇到了一些麻烦。
我正在使用 hInst = LoadLibrary(TEXT("mydll.dll"));
加载另一个 C++ dll,我开始意识到这会查找我要加载的 dll 'C:\' 或在 'system32' 中。
谁能告诉我如何从当前目录加载 dll(提前不知道当前目录是什么)??
我知道我应该使用像 GetFullPathName
这样的东西,但我在让它自己工作时遇到了一些麻烦......
最佳答案
可以使用函数GetCurrentDirectory()
获取进程当前目录:
TCHAR bufCurrentDirectory[MAX_PATH + 1] = { 0 };
DWORD dwNumCharacters = ::GetCurrentDirectory(MAX_PATH, bufCurrentDirectory);
if(dwNumCharacters == 0) error();
现在进程当前目录的路径在 bufCurrentDirectory
中,除非函数失败。只需将 "\\mydll.dll"
附加到路径上,您就拥有了 DLL 的绝对路径。
由于进程的当前目录有些可变,使用可执行文件的路径可能更好。要获取当前可执行文件的路径,您可以这样做:
TCHAR bufExePath[MAX_PATH + 1] = { 0 };
DWORD dwNumCharacters = ::GetModuleFileName(NULL, bufExePath, MAX_PATH);
if(dwNumCharacters == 0) error();
现在 bufExePath
包含 exe 的完整路径,包括 "\\my.exe"
。将 my.exe
替换为 mydll.dll
,您将获得 DLL 的绝对路径。出于安全考虑,我会推荐此方法而不是 GetCurrentDirectory()
方法。
关于来自当前路径的 C++ LoadLibrary(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4538987/