我有一个项目(创建一个 dll),比如 test.dll,我没有在 dll 中导出类的构造函数和析构函数,比如 TestClass。这是因为我有一些工厂函数应该被调用来创建和销毁 TestClass 的对象。这种设计在我尝试使用来自 test.dll 的 TestClass 对象的地方创建的独立示例中运行良好。
但是,当我将此 test.dll(或在我的情况下为 .lib,因为我使用 Visual Studio)链接到我们的生产模块中的项目时,我得到了指向构造函数和析构函数的奇怪链接错误,它无法为 TestClass 找到它。我知道我不会在项目的任何地方调用 new/delete 或创建 TestClass 的任何堆栈实例。生产模块使用 C#/CLR/CLI 以及我认为的 C++。解决问题的唯一方法是为我导出 TestClass 的构造函数和析构函数。这是设计所不希望的。
这种情况有人熟悉吗?有人可以指出可能是什么问题吗?
这是我得到的错误:
Error 5264 error LNK2028: unresolved token (0A000BA3) "public: virtual __thiscall BE::TestClass::~TestClass(void)" (??1TestClass@BE@@$$FUAE@XZ) referenced in function "public: virtual void * __thiscall BE::TestClass::`vector deleting destructor'(unsigned int)" (??_ETestClass@BE@@$$FUAEPAXI@Z) AMBestDetailBridge.obj BEBase
Error 5373 error LNK2001: unresolved external symbol "public: virtual __thiscall BE::TestClass::~TestClass(void)" (??1TestClass@BE@@$$FUAE@XZ) AMBestDetailBridge.obj BEBase
谢谢!