【问题标题】:is windows 6 based dll runnable partially on windows 5?基于 Windows 6 的 dll 是否可在 Windows 5 上部分运行?
【发布时间】:2018-06-03 17:17:14
【问题描述】:

你有一些第三方 dll,它在 winapi 上中继

winapi有一些版本和一些功能是在win 6 win 7等中添加的

我不确定一件事,如果这个第三方 dll 通常在 Windows 6 上中继,我的意思是它使用了 winapi 5 中的很多功能,但只有 winapi 6 中的一两个功能

假设你想在 Windows 5 上使用这个第三方 dll - 假设你只调用了它的功能的一个子集,而不会调用这个 winapi 6 函数

一般可以吗? (或者只是因为某种原因不可能?如果没有,那到底是什么原因?

例如,这个第三方 dll 在导入中列出了这个 win6 函数,但我也相信你调用的一些函数只是不使用它,我不确定是否可以在 win5 上使用这个 dll 的有限功能也)

如果有人知道,请澄清一下

【问题讨论】:

  • @lurker:为什么不呢?如果它可以解决加载时动态链接依赖关系,它将加载模块。
  • 只是不调用 thise winapi 6 函数 - 如果 dll import 某些 api 在旧 Windows 版本中不存在 - 此 dll 无法加载。不要调用这个 api 没有帮助。 dll 最初不得导入不存在的 api。解决方案可以说使用延迟导入
  • 解决此问题的传统方法是按名称调用所有 Windows 5 函数,但通过 LoadLibrary / GetProcAddress (有条件地)调用任何 Windows 6 函数。这样,应用程序将在 Windows 5 上加载,因为它不直接引用任何 Windows 6 API,而这正是加载程序所关心的。
  • RbMm 你确定吗?我问 ocz 我不知道 - 加载到 ram 时是否检查了所有导入的符号?是否有任何涉及检查的延迟系统或类似的东西?
  • Paul Sanders 问题出在我不是这个第三方 dll 的作者...我只想在 Windows 5 上以“部分”方式使用它...我的意思是假设我会只使用一些不调用win6函数的调用;c我理解你说它不起作用(尽管理论上它在理论上可能起作用,我不确定它是否在理论上也能起作用)

标签: windows winapi dll


【解决方案1】:

如果 DLL 隐式链接到当前系统中不存在的 DLL 或函数,则加载将失败。无论您是否实际调用不存在的函数都没有关系,隐式链接的依赖关系在加载时解决。

【讨论】:

  • 即使模块使用隐式链接,它仍然可以选择将依赖项标记为/DELAYLOAD,将控制权交还给处理未解决的外部的进程。根据依赖关系,这可能会为优雅地处理上层依赖关系提供机会。但这个问题太不完整了,不能打这个电话。
  • IInspectable 如果我仍然感到困惑...想象一下这种情况,我说这个第三方库是一些支持库,旨在与 Windows 6 或更高版本一起使用...我想在 Windows 上使用它5...有没有机会我可以做到这一点?让它在 Windows 5 上工作?
  • 你可能会认为 Windows 6 添加了一些 minof 函数,比如一些不太重要的函数的几个扩展版本,大多数函数是相同的......我仍然想知道我是否会标记 delayload这个第三方dll中的win6导入我可以使用它或不使用它(并将消息框“找不到符号”延迟到我在运行时调用实际调用它的东西的那一刻)
  • 我需要自己在win10上制作它然后在win5(xp)上尝试它实际上我可以做到但它现在需要付出很多努力......我在这里看到的硫磺答案我必须说是关于主题机器人没有太多决定性
  • 你不需要制作任何东西。您只需要尝试在 xp 上加载 dll。如果失败,那么游戏就结束了。另外,我认为我的回答是关于主题的,但也许您还不够了解这些问题。
猜你喜欢
  • 1970-01-01
  • 2021-11-04
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
相关资源
最近更新 更多