gpt4 book ai didi

c++ - GetModuleFileName 在 Win 7/Win 10 上的不同行为

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:13 30 4
gpt4 key购买 nike

我在我的应用程序中使用 libeay32.dll/ssleay32.dll 库来支持 https。库在 Windows 7 上成功加载(不是通过我的应用程序,通过 Qt 库),但是我在 Windows 10 上遇到 SSL 错误。

我写了一个小应用程序来确保是否加载了正确的库实例(例如不是从 PATH 加载的)并得到了有趣的结果。

这是代码

HMODULE hSsleay = LoadLibrary("ssleay32.dll");
DWORD pathSize = GetModuleFileName(hSsleay, ssleayPath, pathSize);
if (pathSize) {
std::cout << "Module ssleay32.dll detected path = " << ssleayPath << '\n';
}
else {
std::cout << "Module ssleay32.dll detection error LastError = " << GetLastError() << '\n';
}

Windows 7 x86 上的输出是

Module ssleay32.dll detected path = C:/Program Files/My Application/ssleay32.dll

但是,在 Windows 10 x64 上它是

Module ssleay32.dll detected path = C:/Program Files (x86)/My Application/LibraryLocator.exe

其中 LibraryLocator.exe 是一个测试应用程序的名称,包含上面的代码

最佳答案

GetModuleFileName() 在其 hModule 参数设置为 NULL 时返回调用进程的路径。 LoadLibrary() 失败时返回 NULL。很明显,您对 LoadLibrary() 的调用失败了(例如,如果您的 32 位 EXE 试图加载 DLL 的 64 位版本,或者它无法在 PATH 中找到 DLL 因为你没有指定绝对路径)。在调用 GetModuleFileName() 之前您没有处理错误。

如果 Qt 已经为您加载了 DLL,您应该使用 GetModuleHandle() 而不是 LoadLibrary()

关于c++ - GetModuleFileName 在 Win 7/Win 10 上的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48091432/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com