来自当前路径的 C++ LoadLibrary()

标签 c++ dll

我主要是一名 .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/

相关文章:

c++ - BMP 的完整屏幕截图。 bliting 和保存的问题

c++ - 在 Windows 上同时使用 .so 和 .dll

c# - 流行的开源库和引用冲突

Java JNA 无效内存访问

c++ - 如何使基模板类函数在派生类中可见?

c++ - 是否可以检查是否为类定义了成员函数,即使成员是从未知基类继承的

c++ - basic_stringbuf 没有名为 'freeze' 的成员

c++ - 我不知道如何重复整个程序

c++ - GetProcAddress 用于将修饰的 C++ 函数导入到 C++ 中

c# - 在 C++ 非托管 dll 和 C# 托管 dll 之间发送 Byte[][]