gpt4 book ai didi

c++ - 使用 LoadLibraryA 加载 dll 时出错

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:23 25 4
gpt4 key购买 nike

我们正在尝试使用 LoadLibraryA 函数从 64 位 dll 中加载一个 dll 库。它返回 126 错误 - 找不到模块。给函数的 dll 文件路径是正确的,我们确信。

我们已经尝试了一个虚拟 dll 来测试并且它有效,它被加载了。

我们还尝试将 dll(这是我们要加载的第一个 dll 的依赖项)添加到虚拟 dll。它也起作用了。所以问题似乎不是关于依赖 dll,而是我们首先要加载的原始 dll。

我们也试过将 dl 转换为 64 位,并试过了,还是不行。

我们还使用 Dependency Walker 检查了依赖关系。一切正常。

我们使用的操作系统是 Windows 8,64 位。如果它有什么不同..有人知道这个问题吗?

编辑:我们还尝试了这段代码:

hModule = LoadLibraryW(L"C:\\temp\\dllToLoad.dll");

并收到此错误代码:

"First-chance exception at 0x00000000 in C_Test_TSMPPKCS11.exe: 0xC0000005: Access violation at location 0x0000000000000000."

编辑 2:我们首先使用的代码是:

hModule = LoadLibraryA((char*)aDLLFile);

编辑 3:我们正在使用完整路径来加载 dll。为了对此进行测试,我们尝试了以下代码:

FILE *fp;
int size = 0;
fp=fopen("C:\\temp\\dllToLoad.dll", "r");
size = fgetc(fp);
printf("size:%d\n",size);
fclose(fp);

没问题,我们收到的文件大小是 77。

最佳答案

We also tried converting the dl to 64-bit, and tried that, still no good.

您无法将 32 位 dll 作为可执行代码加载到 64 位进程中(并且由于您使用的是 LoadLibraryA(),所以您只能尝试这样做)。

假设您尝试加载的 dll 和您正在加载它的进程是同一类型,那么您是将完整路径传递给 LoadLibraryA() 还是相对路径或只是一个 dll 名称?如果您没有使用完整路径,请尽可能考虑使用 LoadLibraryEx(),因为这可以让您更好地控制所使用的搜索路径。如果您使用的是完整路径,如果加载 dll 失败,请尝试使用正常文件操作打开文件,这是否有效?如果可行,则尝试使用 LoadLibraryEX() 和 LOAD_LIBRARY_AS_DATAFILE 并查看是否会将 dll 作为简单数据文件加载(这证明它正在查找文件)。

跑起来Sysinternal's ProcMon并观察打开 DLL 的代码,这可能会显示依赖 DLL 加载失败。

关于c++ - 使用 LoadLibraryA 加载 dll 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20001547/

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