如何在Visual C ++中为DLL和EXE使用相同的堆

问题描述 投票:-2回答:1

我正在开发一个共享引擎库,以在不同的应用程序中使用它。但是当我制作DLL并将其链接到应用程序时,它开始失败,并出现了不同的内存错误。

据我了解,不同的DLL和EXE堆会导致这种情况。看截图:enter image description here

我需要的对象在方括号中,但是我无法从应用程序访问它。 DLL也是如此。

如何使它使用相同的堆或直接访问这些对象?

当我构建共享库并在应用程序中使用它们时,在Linux或Mac上没有任何相同的错误。仅在Windows中,我不知道如何使其正常工作。我敢肯定,在这种情况下使用静态库不是很好,但是我应该找到一种解决方案,使它和平运行。

发生错误的代码(这是我解决的另一个示例。当我从该层次结构中获取对象时,上面的错误发生了,但是存在于不同的领域):

if (EditorInstance::GetSingleton()->currentScene->hierarchy->empty())

层次结构在哪里:

boost::container::list<GameObject*>

Scene类中。

我正在初始化构造函数中的列表,但是当我尝试在应用程序中使用它时,它尚未初始化。可以部分解决此问题的技巧是getter,它返回层次结构:GetHierarchy()。但是对于整个对象,没有这样的hack ...

现在我可以从层次结构中获取对象,但是如屏幕截图所示,它指向2个不同的对象,其中一个是我定义的,可以从DLL访问,而另一个是未定义的(我可以在使用之前立即对其进行定义。在应用程序中,否则它将仅对于DLL对象存在。)DLL对象位于方括号中,应用程序对象位于根目录中。

c++ windows visual-c++ dll dllexport
1个回答
0
投票

我的主要错误是我已列出所有对象的指针,该指针后来被销毁了(GC?)。

我已经在谓词下创建了这个对象,并且从if退出后,它被清除,并且擦除了我传递给列表的指针。

if(something){
    GameObject* newObject = new GameObject();
    ...
    hierarchy.push_back(newObject);
}

是吗?

© www.soinside.com 2019 - 2024. All rights reserved.