3

次のモデルの状況を検討してください。

  1. DLLインターフェイスは変更されませんが、実装は変更されます。実行可能ファイルを新しいインポートライブラリにリンクする必要がありますか?アプリケーションとDLLの両方が、同じコンパイラとリンカを使用して同じIDEでコンパイルおよびリンクされています。

  2. DLLインターフェイスは変更されませんが、実装は変更されます。アプリケーションとDLLの新しいバージョンは、IDEバージョン2.0でコンパイルおよびリンクされます(記号的な意味、たとえばC ++ Builder XE2に置き換えてください)。アプリケーションバイナリを、IDE 1.0のバージョンでコンパイルされた古いバージョンのインポートライブラリ(C ++ Builder 6など)とリンクすることは可能ですか?プログラムは、実行時エラー(アクセス違反など)なしで正常に実行されますか?

4

1 に答える 1

2

同じコンパイラの製造元とバージョンを維持すると、マングルされた名前も同じになるため、#1で問題ないはずです。

#2は、おそらくそうなると考えられることを意味し、あなたを噛む可能性のある名前マングリングの互換性を導入することができます。エクスポートがすべて「C」スタイル(単純な名前)であるか、.defファイルを介してマングルされていないIDにハードマップされている場合(または序数でロードする場合、最近は誰も行っていないようです)、#2まだ可能です。

于 2012-11-09T09:49:48.120 に答える