【问题标题】:DLLImport failing to load DLLDLLImport 无法加载 DLL
【发布时间】:2012-08-09 07:25:59
【问题描述】:
我有代码可以调用用 C 编写的 DLL。这段代码在我们拥有 Windows7 的开发人员机器上运行良好。但它在我们拥有 Windows Embedded Standard OS 的 Kiosk 上失败,并出现以下异常:“无法加载 DLL 'xxx.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)”。
我的 DLL 和以前一样位于我的工作目录中。我的项目设置没有改变,工作目录指定正确。我尝试使用从 Kernel.DLL 导出的函数设置“DllImport”路径,但它无济于事。有什么改变会导致这个错误?
【问题讨论】:
标签:
.net
reflection
embedded
dllimport
【解决方案1】:
使用 DependencyWalkier http://www.dependencywalker.com/ 之类的工具加载 DLL,并检查 DLL 需要哪些外部模块。您的 W7 上可能有一些 Kiosk 机器上不存在的东西。如果我没记错的话,如果 .Net 没有找到所有依赖项,它会引发同样的异常。
该工具将允许您查看 DLL 引用了哪些本机模块。如果您设法在 Kiosk 上运行该工具,它将向您报告所有缺少的依赖项。如果有的话 - 你有理由。如果没有 - 好吧..那么乐趣又开始了:)
顺便说一句。堆栈跟踪中有什么有趣的吗?
顺便说一句。您是否尝试过启用 fusionlog?嗯.. 不.. 它是本机 DLL,所以 Depends 应该找到原因。我敢打赌它是运行时版本。啊对 --- 那个 DLL 是否完全属于你?如果是您的,该本地 DLL 是使用 DEBUG 还是 RELEASE 模式构建的?如果调试,则在 Release 中重新编译。这是一个很常见的陷阱。