繁体   English   中英

如何找到“由'xxx.dll导入的过程'的源无法加载。”例外?

[英]How do I find the source of a “A procedure imported by 'xxx.dll' could not be loaded.” exception?

过去一周我一直在追逐这个例外。

情况是:

我有一个用C#编写并在Visual Studio 2010中构建的应用程序。该应用程序包含一个DLL,它是非托管代码库的包装。 非托管代码是用C ++编写的,并在Visual Studio 2008中构建。这是必需的,因为代码引用了其他库(Qt),并且该代码以WinCE版本5为目标(由于该字段支持的设备,这是必需的)。

我已经尝试了很多我在这里看到的建议,包括使用各种依赖步行器(VS 2008依赖,dependency_walker和Dependz)以及其他工具,例如SysInternals的Reflector和Process Monitor。

所有这些工具都没有显示任何问题(Reflector)或在我的环境(Win 7)中过时的旧依赖项,如DCOMP.DLL,GPSVC.DLL和IESHIMS.DLL。

在调试器中,我可以直接执行我的代码,直到我实例化一个引用我的Managed Wrapper DLL的对象。 它不会进入对象的实例化,而是立即抛出异常。

在Process Explorer(来自SysInternals)中,我可以看到加载的Managed DLL以及必要的辅助DLL。 在进程监视器(来自SysInternals)中,在问题出现时,没有找不到堆栈的未找到的消息。 它失败了。

任何想法或想法发现这个问题将不胜感激。

@ Hans Passat - 感谢您对Global Flags的暗示。

是一篇关于使用这些工具的优秀博客文章。 大多数Google引用的“Show Loader Stacks”引用的gflags.exe程序是Windows设备驱动程序开发工具包(WinDDK)的一部分,它管理该帖子中提到的注册表设置。

运行“Show Loader Stacks”的输出确定应该在我的非托管DLL中的符号不​​在我正在使用的DLL中。

事实证明我正在构建错误版本的DLL。 这是由于我对构建过程的理解不足(太多版本构建了太多不同的方法)。

工作的标准工具: Dependency Walker

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM