5

我有一个 JD Edwards 业务功能,它是用 Microsoft Visual C++ 作为 C 模块编写的。我正在使用 LoadLibrary 访问第三方 DLL。在独立的测试程序中,代码运行得很好。当我从 JDE 中运行它时,LoadLibrary 返回 NULL,GetLastError 返回 126,这意味着The specified module could not be found根据 MSDN。我已经尝试输入 DLL 的完整路径,是的,我记得将路径中的 \ 字符加倍。没有不同。

我已经检查以确保没有任何依赖项会阻止 DLL 加载;DUMPBIN /DEPENDENTS 返回以下内容:

WSOCK32.dll
USER32.dll
GDI32.dll
WINSPOOL.DRV
ADVAPI32.dll
KERNEL32.dll

这些看起来像标准的 Windows DLL,所以我很茫然。

4

6 回答 6

5

缺少依赖?您是否与Dependency Walker确认找到所有引用的库?

于 2009-05-08T22:51:16.193 回答
3

如果在 LoadLibrary 调用期间附加调试器,它可能会向调试输出发送错误信息。除了此处的其他建议外,如果清单中有错误,则会出现此问题。

我很确定它对你来说是一个依赖问题。试试 ProcMon 的东西,并尝试在 Vista 上运行,看看是否能解决问题。您可以在此处获取测试 VPC 映像。

于 2009-05-12T15:36:57.333 回答
2

我曾经陷入同样的​​噩梦。无法诊断任何东西,我刚刚发现重置 dll 搜索列表顺序路径(这里的关键字可能是“列表”,而不是“顺序”)解决了这个问题。

SetDllDirectory(NULL);

解释是中间的第三方DLL可能是在搞乱它,没有恢复它的原始状态。这可以解释为什么只有您的测试应用程序在工作。

于 2009-06-05T15:19:14.043 回答
0

此外,可以使用配置文件选项运行Dependency walker 。在这种情况下,exe 必须在依赖 walker 中加载。之后可以使用菜单“配置文件”。

然后启动应用程序并填充 dll 树。这还将显示是否缺少延迟加载 dll 和其他内容。

于 2009-06-08T11:43:03.417 回答
0

如果您无法通过检查依赖项找到答案,我建议您专注于架构可能导致的问题。

您提到您正在使用独立的测试环境,但是当您在常规环境中尝试时它不起作用。业务功能设置是否在服务器中运行?

自从我上次使用 JDE 以来已经有一段时间了。我记得有一次我用 C 语言编写了一个 BSFN,以一种同步方式调用多个 UBE,它在我的本地机器上运行良好,但在我在服务器上测试时却无法运行。服务器无法找到 DLL(即使我提供了路径)和一些必需的设置存在一些问题。此外,在我的情况下,有一个关键的区别:在我的机器上,BSFN 将等待 UBE 的完成并捕获状态,在服务器上它不会,它还与对象的设置有关.

同样,如果您没有发现任何有用的信息,请尝试在 www.jdelist.com 上寻求帮助。

于 2009-09-22T19:47:48.313 回答
0

您可以尝试在ProcMon运行时进行测试,看看在启用文件监视时是否有任何错误可见。

于 2009-05-12T15:32:48.870 回答