无效的内存使用类从一个DLL

这是我第一次试图从一个DLL导出一个类。 我所做的是: – 创build一个接口(只有纯虚方法) – 在dll中实现这个接口的类不会被导出 – 类有一个释放方法,调用它的指针删除 – 创build一个工厂类用一个静态方法返回一个指向具体类的指针,但作为接口。 这个类是导出的。 – 通过调用其释放方法来删除返回的对象。

我从这个教程讨论了dll中的类 。

问题是,当我在另一个项目中使用这个dll时,一切正常,直到我调用对象的释放function。 然后显示一个断言失败的窗口,并显示消息“_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse));

这发生在别人身上吗? 我知道这很简单,就像在启动C ++时忘记使用std ::但正如我刚才所说的那样。

谢谢!

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

例如,你的标题应该看起来这样:

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

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

感谢您的回答,对不起,我开始了这一切!

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

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