0

我有代码可以调用用 C 编写的 DLL。这段代码在我们拥有 Windows7 的开发人员机器上运行良好。但它在我们拥有 Windows Embedded Standard OS 的 Kiosk 上失败,并出现以下异常:“无法加载 DLL 'xxx.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)”。

我的 DLL 和以前一样位于我的工作目录中。我的项目设置没有改变,工作目录指定正确。我尝试使用从 Kernel.DLL 导出的函数设置“DllImport”路径,但它无济于事。什么可能会导致此错误?

4

1 回答 1

0

使用 DependencyWalkier http://www.dependencywalker.com/之类的工具加载 DLL,并检查 DLL 需要哪些外部模块。您的 W7 上可能有一些 Kiosk 机器上不存在的东西。如果我没记错的话,如果 .Net 没有找到所有依赖项,它会引发同样的异常。

该工具将允许您查看 DLL 引用了哪些本机模块。如果您设法在 Kiosk 上运行该工具,它将向您报告所有缺少的依赖项。如果有的话 - 你有理由。如果没有 - 好吧..然后乐趣又开始了:)

顺便提一句。堆栈跟踪中有什么有趣的吗?顺便说一句。您是否尝试过启用 fusionlog?嗯.. 不.. 它是本机 DLL,所以 Depends 应该找到原因。我敢打赌它是运行时版本。啊对 --- 那个 DLL 是否完全属于你?如果是您的,该本地 DLL 是使用 DEBUG 还是 RELEASE 模式构建的?如果调试,则在 Release 中重新编译。这是一个很常见的陷阱。

于 2012-08-08T23:25:59.210 回答