2

を使用する場合__declspec(dllexport)、オーバーロードされた演算子にもこのエクスポートフラグを割り当てる必要がありますか?たとえば、次のようなものがあるとします。

/* 
Overloaded operator (equivalent operator) returns true if x equals compared vector
*/
__declspec(dllexport) bool operator ==(const vector &v)
{
  return (x == v.x && y==v.y && z==v.z);
}

クラスタイプで__declspec(dllexport)使用するために必要ですか?==または、そのクラスと継承されたクラスに固有であるため、エクスポートしないでください。

4

2 に答える 2

4

通常、クラス宣言に __declspec(dllexport) を適用して、シバン全体がエクスポートされるようにします。クラスに仮想メンバーがある場合に重要な v-table もエクスポートします。一人ずつやるのはかなり面倒だし面倒です。

オーバーロードをスキップする理由がわかりません。クラスで公開した場合は、DLL からも公開する必要があります。そうしないと、誰かがリンカ エラーを診断するのに非常に苦労することになります。

于 2011-03-25T18:44:28.277 に答える
3

そのような関数は通常インライン化されます。代わりにクロスモジュール (間接化と修正) 関数呼び出しを強制したい理由が想像できません。

しかし、クラスをエクスポートすることはお勧めしません。なぜなら、2 つの DLL 間の密結合が作成され、後でメンテナンスの頭痛の種になるからです。

于 2011-03-25T19:00:04.300 に答える