使用从DLL类时无效的内存

这是我第一次尝试从一个DLL导出类。 我所做的就是: - 装箱接口(纯虚函数) - 实现与该不会导出类的DLL这个接口 - 类有调用删除其this指针释放方法 - 创建了一个工厂类与该指针返回到混凝土类,但作为界面的静态方法。 这个类出口。 - 返回的对象的删除是通过调用它的发行方式进行。

我掖这一切都源自本教程的DLL中的类。

问题是,当我在另一个项目中使用此DLL,直到我调用该对象的释放功能一切都ok了。 然后,它显示的断言与消息未能窗口“_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse));”

难道这发生在别人? 我知道这是因为忘记使用std ::当启动C ++一样简单,但我说我刚开始这一点。

谢谢!

--------------解决方案-------------

在头文件中定义你的工厂函数? 如果是,而new创建的对象是在头然后调用delete从DLL中可能导致此错误。 工厂函数需要由DLL导出,仅声明必须出现在标题中。

例如,你的头看起来应该行这样的:

class MyInterface
{
public:
virtual void DoSomething() = 0;

virtual ~MyInterface() {}
};

__declspec(dllexport) MyInterface * __stdcall MyInterfaceFactory();

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

谢谢您的回答,我很抱歉,我开始了这个没出息!

这个问题很简单,但背后隐藏的接口,工厂和其他一些东西。 我返回一个指向被声明为静态的,因为它是一个单身的对象。 然后我试图释放此对象。 BANG堆腐败!

我的单身对象不应该摆在首位释放功能; 我会通过提取在一个单独的接口发布功能,即只能由非静态的对象实现解决这个问题。

分类:C# 时间:2012-11-30 人气:0
本文关键词: Visual Studio中,窗,DLL
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.948 (s). 10 q(s)