-1

アップデート:

親切に返信してくれてありがとう。私は少し混乱していたようです。変更は、基本クラスに新しいメンバー関数を追加することでした。シンボル テーブル内の関数名のアドレスが変更されたため、このクラスをエクスポートする dll に依存するすべてのものを再コンパイルする必要があることに気付きました。私が正しいか間違っているか確認してください。

これについて議論を始めたのですが、

一部の基本クラスでメンバー関数の変更があった場合、この基本クラスから派生したすべてのクラスのみを再コンパイルしたところ、実行時エラーが発生しました。

議論の反対側では、代わりに、この基本クラスに「依存する」すべてのクラスを再コンパイルする必要があると言われました。

  1. それが正しいかどうかわかりませんか?私は DLL を構築しており、この動的リンクのアイデアは再コンパイルしないことを常に理解しているからです。

  2. それが本当なら、ここでの「依存関係」とはどのようなものなのだろうか?

この質問は一般的すぎるかもしれません。他に提供すべき詳細があれば教えてください。コンパイルとリンクについて本当に学ぶ必要があります。

ありがとう!

4

1 に答える 1

1

DLL とクラスはうまく連携できません。(DLL 内でクラスを使用することは問題ありません。問題が発生するのは、クラスをエクスポートしようとするときです。)

このため、コンポーネント/オブジェクト システム (COM、ActiveX、CORBA など) は、ユーザーを実装から分離するインターフェイスを定義します。DLL のパブリック API が、純粋仮想関数のみを持つ型へのポインターのみを使用する場合、DLL と呼び出し元の間で共有されるレイアウトはありません。

クラスをデータまたはインライン関数と共有しようとすると、密結合になり、わずかな実装変更のためにすべてのユーザーを再コンパイルする必要があります。

于 2012-04-23T03:38:07.750 に答える