gpt4 book ai didi

c++ - 使用 dll 中的类时内存无效

转载 作者:可可西里 更新时间:2023-11-01 11:37:41 24 4
gpt4 key购买 nike

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

我从本教程中收集了所有这些 about classes in dlls .

问题是,当我在另一个项目中使用此 dll 时,一切正常,直到我对该对象调用释放函数。然后它会显示一个断言失败窗口,其中包含消息“_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));”

这件事发生在其他人身上吗?我知道这就像在启动 C++ 时忘记使用 std::一样简单,但正如我所说,我刚刚开始。

谢谢!

最佳答案

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

例如,您的页眉应如下所示:

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

virtual ~MyInterface() {}
};

__declspec(dllexport) MyInterface * __stdcall MyInterfaceFactory();

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

关于c++ - 使用 dll 中的类时内存无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7276398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com