在VS2005中修补二进制文件而不重新编译

时间:2012-06-29 17:49:19

标签: c++ visual-c++ visual-studio-2005

我遇到了一个问题,我可能已经在我脑海中,并希望有人可以帮助我。我的C ++技能相当缺乏,但我愿意学习。

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

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

我有主要兼容的代码,用于生成二进制文件和二进制文件本身。当然必须有一些方法用我的更改修补现有的DLL,而不实际编译项目?我从未做过任何二进制修补。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

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

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

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

实际上,您可以向.def文件添加更多功能,只要旧功能(及其签名)的原始顺序不会改变,您就不会破坏客户端的应用程序。这就是Windows将更新的DLL发送给其(相当多的)客户端的方式。