加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 构造函数/析构函数链接错误

发布时间:2020-12-15 21:39:13 所属栏目:百科 来源:网络整理
导读:我有一个项目(创建一个DLL),比如说test.dll,我没有在dll中输出类的构造函数和析构函数,比如TestClass.这是因为我有一些工厂函数应该被调用来创建和销毁TestClass的对象.这个设计在我创建的独立示例中完美地运行,我尝试使用test.dll中的TestClass对象. 但是,
我有一个项目(创建一个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

谢谢!

解决方法

链接错误说你通过delete []调用析构函数,所以很可能在你的生产模块中,你有一些代码:

TestClass* pTest = ...
delete pTest;
TestClass* pTestArray = ...
delete[] pTest;

当然,在智能指针的情况下,它可能不是那么明显:

SmartPtr<TestClass> spTest = ...
// delete called automatically when out of scope.

在一个模块中分配并在另一个模块中删除会使自己面临潜在的风险 – 因为2个模块可能使用不同的堆进行内存分配(比如重新定义新的运算符),幸运的是这个问题在链接时暴露,而不是在运行时暴露.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读