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