使用dll中的类时,内存无效



这是我第一次尝试从dll导出一个类。我所做的是:创建一个接口(只支持纯虚方法)-在DLL中用一个不能导出的类实现了这个接口类有一个释放方法,在它的this指针上调用delete-创建了一个带有静态方法的工厂类,该方法返回一个指向具体类的指针,但作为接口。这个类是导出的。-通过调用其释放方法来删除返回对象。

我把所有这些都从这个教程中关于dll中的类中摘取下来。

问题是,当我在另一个项目中使用这个dll时,一切都很顺利,直到我调用对象上的释放函数。然后它显示一个断言失败窗口,消息为"_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));"

这件事发生在别人身上了吗?我知道这就像你在开始c++时忘记使用std::一样简单,但正如我所说的,我刚刚开始。

谢谢!

是否在header中定义了工厂函数?如果是,并且用于创建对象的new在头文件中,那么从DLL中调用delete可能会导致此错误。工厂函数需要由DLL导出,只有声明必须出现在头文件中。

例如,你的标题应该像这样行:

class MyInterface 
{
public:
  virtual void DoSomething() = 0;
  virtual ~MyInterface() {}
};
__declspec(dllexport) MyInterface * __stdcall MyInterfaceFactory();

MyInterfaceFactory()的实现必须包含在DLL中

谢谢你的回答,我很抱歉我白开了这个头!

问题非常简单,但隐藏在接口、工厂和其他一些东西后面。我返回一个指针,指向一个被声明为静态的对象,因为它必须是单例的。然后我试着释放这个物体。一堆腐败!!

我的单例对象一开始就不应该有释放函数;我将通过在一个单独的接口中提取释放函数来解决这个问题,该接口将仅由非静态对象实现。

相关内容

最新更新