0

我有一个问题,我可能在我的头上,希望有人可以帮助我。我的 C++ 技能比较欠缺,但我愿意学习。

我在这里有一个 Visual Studio 2005 C++ 项目,它为我们使用的软件生成一个 DLL。问题是,我的代码比客户端使用的代码稍新,此时更新客户端是不可能的。

我需要做一些更改(主要是注释掉一些函数和调用,更改一些值,仅此而已)。通常我会更改代码并编译,但这给了我一个与客户端不兼容的二进制文件(因为它们已经过时了)

我有生成二进制文件的兼容的代码,以及二进制文件本身。肯定有某种方法可以用我的更改来修补现有的 DLL,而无需实际编译项目吗?我从来没有做过任何二进制补丁。

任何帮助将不胜感激!

4

1 回答 1

0

DLL 实际上是为解决您描述的问题而设计的,即如何在不重新编译整个项目的情况下修复客户手中的产品?DLL 建立了一个二进制边界,您可以简单地将其换出。

不幸的是,我认为最好的方法是重新编译 DLL。希望你在下面听到我的声音。:)

即使您的代码比客户端的代码更新,您需要维护的接口也在 .def 文件中定义。因此,只要您不破坏 .def 文件中定义的函数的原始接口契约,您的代码库就可以与客户端的完全不同,这无关紧要。

http://msdn.microsoft.com/en-us/library/d91k01sh(v=vs.80).aspx

事实上,您可以在 .def 文件中添加更多功能,只要旧功能(及其签名)的原始顺序不变,您就不会破坏客户的应用程序。这就是 Windows 如何将更新的 DLL 发送给他们的(相当大量的)客户端。

于 2012-06-29T21:23:22.747 回答