0

Visual Studio 2008 を使用していますが、コンパイラで生成された代入演算子 (およびコピー コンストラクター) をエクスポートしようとすると、問題が発生しました。

コードは次のとおりです。

class __declspec(dllexport) Example {

  public:

     Example () {}
};

このコードから dll を作成すると、次のエクスポートされたシンボルが取得されます。

      1    0 00001010 ??0Example@@QAE@XZ = ??0Example@@QAE@XZ (public: __thiscall Example::Example(void))
      2    1 00001000 ??4Example@@QAEAAV0@ABV0@@Z = ??4Example@@QAEAAV0@ABV0@@Z (public: class Example & __thiscall Example::operator=(class Example const &))

Ordinal 2 は、コンパイラによって生成された代入演算子です。

私は、.DEF ファイルを使用してこれらの同じ 2 つのシンボルをエクスポートし、dllexport ディレクティブを削除できると (誤って思われるように) 想定していました。シンボルを非表示にするために、はるかに大きなプロジェクトでこれを実行したいと考えています。

class Example {

  public:

     Example () {}
};

および .DEF ファイル:

LIBRARY "dll"
EXPORTS
??0Example@@QAE@XZ
??4Example@@QAEAAV0@ABV0@@Z

これをビルドしようとすると、次のリンク エラーが発生します。

dll.exp : error LNK2001: unresolved external symbol "public: class Example & __thiscall Example::operator=(class Example const &)" (??4Example@@QAEAAV0@ABV0@@Z)

dllexport が削除されると、コンパイラは代入演算子を生成しなくなったようです。これはなぜでしょうか?

4

0 に答える 0