1

我有一个应用程序依赖于我组织中其他人构建的几个库,其中一个已停止工作。我在命令行中收到此错误:

Unhandled Exception: System.IO.FileLoadException: A procedure imported by 'XXX.dll' could not be loaded.

我打开 Dependency Walker 试图找出问题的根源,尽管我应该说我是 Dependency Walker 的新手,我真的不知道自己在做什么。这是我在日志窗口中看到的内容:

Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.

这似乎很简单,除了:

  • 由于我对 DW 不熟悉,我似乎无法找到这个错误实际上指的是哪个模块
  • 旧版本应用程序附带的同一个 DLL,仍然有效,在 Dependency Walker 中显示相同的内容

我发现新旧 DLL 之间的唯一区别是 KERNEL32.DLL 在较新的 DLL 中显示为红色,而函数 K32EnumProcessModules 显示为红色(未导出)。对于旧 DLL,这个相同的函数根本不会出现(绿色或其他)。

到目前为止总结一下:一个 DLL 有效,另一个无效;在 Dependency Walker 中两者都显示为“坏”,但只有一个函数 K32EnumProcessModules 显示为不好。我不知道这个函数是否是导致“未解决的导入”错误的原因,并想了解一下。

我认为可能导致此问题的唯一更改是将运行时从 .NET 2.5 升级到 .NET 4。此升级是出于与此 DLL 无关的原因进行的,不应影响它:DLL 确实不要对高于 2.5 的 .NET 组件进行任何调用,并且我组织中使用同一库的其他人报告说它在 .NET 4 上运行良好。

我意识到我提供的信息很少,主要是因为我不确定哪些信息可以帮助解决这个问题。如果您希望我进行测试以了解更多信息,请告诉我。

4

1 回答 1

0

可能与此有关https://blogs.msdn.microsoft.com/vcblog/2009/08/27/windows-sdk-v7-0v7-0a-incompatibility-workaround/ 定义 PSAPI_VERSION=1 可能会有所帮助。

于 2016-05-23T09:43:04.617 回答