如何找到"A procedure imported by 'xxx.dll' could not be loaded."异常的来源?
How do I find the source of a "A procedure imported by 'xxx.dll' could not be loaded." exception?
过去一周我一直在追踪这个异常。
情况是:
我有一个用C#编写并在VisualStudio2010中构建的应用程序。该应用程序包含一个DLL,该DLL是非托管代码库的包装器。非托管代码是用C++编写的,并在Visual Studio 2008中生成。这是必需的,因为代码引用了额外的库(Qt),并且该代码针对WinCE版本5(由于现场支持的设备,这是必要的)。
我已经尝试了许多我在这里看到的建议,包括使用各种依赖助行器(VS2008-depends、dependency_worker和Dependz)以及其他工具,如SysInternal的Reflector和Process Monitor。
所有的工具要么显示没有问题(Reflector),要么显示在我的环境中过时的旧依赖项(Win 7),如DCOMP.DLL、GPSVC.DLL,&IESHIMS.DLL.
在调试器中,我可以逐步执行代码,直到实例化引用托管包装DLL的对象。它不会介入对象的实例化,而是立即抛出异常。
在Process Explorer(来自SysInternal)中,我可以看到加载的托管DLL以及必要的辅助DLL。在出现问题的Process Monitor(来自SysInternal)中,没有未找到的消息堆栈。它只是失败了。
如果您有任何想法或想法,我们将不胜感激。
@Hans Passat-感谢您对全局标志的提示。
这里有一篇关于使用这些工具的优秀博客文章。大多数谷歌引用的"显示加载程序堆栈"所指的gflags.exe程序是Windows设备驱动程序开发工具包(WinDDK)的一部分,它为您管理该帖子中提到的注册表设置。
使用"Show Loader Stacks"运行的输出确定本应在我的非托管DLL中的符号不在我使用的DLL中。
事实证明,我构建了错误版本的DLL。这是由于我对构建过程的理解不足(太多的版本以太多不同的方式构建)。
作业的标准工具:Dependency Walker
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 为什么我会" void value not ignored as it ought to be"?
- 如何解决"no Qt platform plugin could be initialized"问题?
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- 如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
- _BitScanForward64 can not be found
- C++复制函数重载导致"must be a nonstatic member function"错误
- 通过分隔符分隔包含 UTF-16 BE 文本的uint8_t数组
- C++ 错误:"array must be initialized with a brace-enclosed initializer"
- "expression must be a modifiable lvalue"是什么意思?
- 如何摆脱导入的 make 项目中的 Eclipse 索引器"Type std::... could not be resolved"错误
- Qt5 部署"procedure entry point could not be located"
- 为什么"types may not be defined in parameter types"
- SFINAE:"enable_if cannot be used to disable this declaration"
- 如何理解"abstract-declarator containing an ellipsis shall only be used in a parameter-declaration"
- 使用自定义 nodejs 插件时的"The specified module could not be found"
- "The breakpoint will not currently be hit. No symbols have been loaded for this document." Visual S
- 如何找到"A procedure imported by 'xxx.dll' could not be loaded."异常的来源?