0

問題が発生しました。おそらく頭がいっぱいで、誰かが私を助けてくれることを望んでいました。私の C++ スキルはかなり不足していますが、喜んで学びます。

ここには、使用するソフトウェアの DLL を生成する Visual Studio 2005 C++ プロジェクトがあります。問題は、私のコードがクライアントが使用しているものよりもわずかに新しく、現時点でクライアントを更新することは問題外であることです。

いくつかの変更を加える必要があります (主に、いくつかの関数と呼び出しをコメントアウトし、いくつかの値を変更するだけです)。通常、コードに変更を加えてコンパイルしますが、クライアントと互換性のないバイナリが得られます (古いため)。

バイナリを生成するほとんど互換性のあるコードと、バイナリ自体があります。実際にプロジェクトをコンパイルせずに、既存の 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 に答える