我正在处理一个遗留的 C++ 项目并且缺少第三方 dll。有人告诉我,该 dll 将在两周内提供。我需要执行的工作是纯 UI。我真的不需要dll。但是,如果没有 dll,应用程序将无法运行。我应该注释掉所有调用 dll 的地方还是创建一个占位符 dll,无论哪种方式都有大量的 API 需要覆盖?没有人有更好的主意吗?
6 回答
我会创建一个什么都不做的存根 DLL(或者你需要它做的很少)。然后当你得到真正的,把它放在你的存根上,你就完成了。
如果您需要创建无数个函数,您也许可以使用 perl 或其他一些脚本语言来帮助将大量链接器错误转换为包含所需函数原型的文件。
如果您可以访问 EXE 的源代码(看起来是这样),并且您正在运行任何最新的 Visual Studio(6 或更高版本),一个简单的解决方案是使用 /DelayLoad 进行重建。这意味着链接器将设置 EXE 以调用 LoadLibrary 并在第一次调用时解析导入。这意味着,如果您实际上不调用DLL,它就永远不会加载,并且通过扩展,不会丢失。
这意味着您不必创建任何存根 DLL;这是一个 5 分钟的变化。
LoadLibrary
我通常通过和调用动态加载非必要的 DLL ,GetProcAddress
这样我的应用程序就可以在没有它们的情况下运行。应用程序可以检查 DLL 是否已加载,如果没有,它不提供 DLL 提供的功能。我已经将它与拼写检查器、条形码库等一起使用。可能需要考虑。
编写单元测试。否则,听起来像是两周的拇指旋转是为了。
你不会走远的。有这么多的电话,除非你在监狱里什么的,否则写一个包装器是对时间的一种不好的利用。
您不能从正在运行的安装中获取 DLL 的副本吗?或者这是一个许可问题?
我,尽管存在许可和其他问题,我仍会尝试在此处复制 .DLL。除此之外,我认为找到另一个项目......