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 文件来导出这两个相同的符号并删除 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