【问题标题】:c++/cli DLL fails under Win 8.1c++/cli DLL 在 Win 8.1 下失败
【发布时间】:2014-08-11 17:08:42
【问题描述】:

我写了一个 Win32/net DLL,它在 Win XP、Win7 和 8 下运行良好,但在 Win 8.1 下却失败了。

Dependency Walker 说:未找到 API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL (user32.dll 会调用它们)

Google 的意思是,MS 在 8.1 中更改了一些 System-DLL(并且忽略了兼容性),因此许多程序都有相同的问题。

带有“找不到文件”的完整列表:

API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL
API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL
MSVCR120.DLL
API-MS-WIN-CORE-SHUTDOWN-L1-1-1.DLL
API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL
EXT-MS-WIN-NTUSER-UICONTEXT-EXT-L1-1-0.DLL
IESHIMS.DLL

有人知道如何解决这个问题吗?

【问题讨论】:

  • 为什么它完全“失败”(启动错误消息等?)以及依赖步行者的相关性是什么? (另外,那东西是不是早就过时了)?
  • 你需要停止使用Depends.exe,它已经很久没有维护了。很多事情它不能再处理了,包括带有转发导出的 DLL,比如这些 api*.dll 文件。如果您需要帮助,那么您必须具体说明“它失败了”。
  • @HansPassant:根据我的经验,它支持转发导出就好了。是改变后的 DLL 搜索顺序让它感到困惑。
  • 你的 cmets,我发现了问题,我忘了安装 C++ 2010 Redistributable as x86 Version
  • 我建议重新打开它。我在使用 boost.python 嵌入 python 时遇到了同样的问题。这不是题外话。

标签: windows winapi dll c++-cli mixed-mode


【解决方案1】:

Dependency Walker 的静态分析是不可依赖的。 Dependency Walker 根据其静态分析报告这些 DLL 的问题并不意味着这确实是您的问题。正如您在静态分析中描述的那样,完美的可执行文件通常会报告问题,但执行得非常好。

现在,我正在查看 Dependency Walker 对我的应用程序的评估,我看到的可能有问题的文件列表与您看到的完全相同。但是应用程序运行得非常好。简而言之,您看到的是误报。

微软在升级操作系统时当然没有忽视兼容性。相反,它竭尽全力保持良好的兼容性。

如果你想使用 Dependency Walker 来调试原生 DLL 的依赖问题,那么你真的需要在动态模式下使用它,使用 Profile 菜单。如果这确实是您的问题,这将告诉您在运行时无法加载哪个依赖项。但根据托管和非托管之间的确切平衡点,Dependency Walker 可能不是适合这项工作的工具。

而且您的问题可能不是本机依赖项的问题。第一步是让您准确诊断问题所在。这超出了这个问题的范围,因为我们没有您遇到的错误的任何详细信息。

【讨论】:

  • 我的问题是,使用我的 dll 的应用程序(不是来自我的)只显示一条消息,它无法加载我的 dll。
  • 所以你需要调试它。我的观点是,问题并不像您所诊断的那样。 MS兼容很好。如果你的 dll 是非托管的,那么使用依赖 walker 的配置文件模式来查找问题。
  • 我的 dll 无法使用配置文件模式,启动选项为灰色
  • 好吧,史诗失败:-/我忘记在我的 Windows 8.1 测试系统上安装 Visual C++ Redistributable 2010/2013 作为 x86 版本。
  • 假设你是对的,当 SHELL32 调用 SHLWAPI.DLL 中的函数 #270 时会发生什么(没有它)?现在,根据dependency walker的说法,在某些情况下,由于Windows是封闭源代码,我们无法真正理解,SHELL32将尝试调用该函数,这将失败......这可能解释了Windows不稳定的原因......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多