【发布时间】: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我理解你说它不起作用(尽管理论上它在理论上可能起作用,我不确定它是否在理论上也能起作用)