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

C++ 如何在Visual C+中为DLL和EXE使用相同的堆+;,c++,windows,visual-c++,dll,dllexport,C++,Windows,Visual C++,Dll,Dllexport,我正在开发一个共享引擎库,在不同的应用程序中使用它。但当我创建DLL并将其链接到应用程序时,它开始因不同的内存错误而失败 据我所知,不同的DLL和EXE堆会导致这种情况。请看屏幕截图: 我需要的对象在方括号中,但我无法从应用程序访问它。DLL也是如此 如何使用同一堆或直接访问这些对象 当我构建共享库并在应用程序中使用它们时,linux或mac上并没有任何相同的错误。只是在Windows中,我不知道如何让它正常工作。我敢肯定,在这种情况下使用静态库不是很好,但我应该找到一个解决方案,如何让它和平

我正在开发一个共享引擎库,在不同的应用程序中使用它。但当我创建DLL并将其链接到应用程序时,它开始因不同的内存错误而失败


据我所知,不同的DLL和EXE堆会导致这种情况。请看屏幕截图:

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

如何使用同一堆或直接访问这些对象

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

代码,发生错误的地方(这是另一个例子,我解决了。当我从这个层次结构中获取对象时,上面的错误发生了,它是存在的,但在不同的世界中):

其中层次结构是:

boost::container::list<GameObject*>
boost::container::list
场景中

我正在初始化构造函数中的列表,但当我试图在应用程序中使用它时,它是未初始化的。部分解决此问题的黑客是getter,它返回hierarch:GetHierarchy()。 但对于整个对象没有这样的黑客

现在我可以从层次结构中获取对象,但如屏幕截图所示,它指向两个不同的对象,一个是我定义的,可以从DLL访问,另一个是未定义的(我可以在应用程序中使用之前立即定义它,否则它将只存在于DLL对象中)
DLL对象在sqare括号中,app对象是root。

我的主要错误是,我推到列出指向对象的指针,该指针后来被销毁(GC?)

我在谓词下创建了这个对象,在退出
if
之后,它被清除,我传递给list的指针被擦除

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

是否正确?

“不同的DLL和EXE堆导致了这种情况”-不,是代码中的错误导致了这种情况
cdcdcdcd
看起来像是未初始化内存的调试模式只要在websearch中抛出您得到的错误,该模式很容易在线找到,并提供更多信息。请确保链接到运行库的DLL版本(与静态版本相反).由于您没有提供,因此无法确切说明此案例中发生的情况。它可以是任何东西,从堆栈损坏到ODR冲突。还请注意,初始化不能执行多次,dll和可执行文件及其所有数据都位于单个进程内。指向整个项目的链接不起作用,您还需要减少此操作。提取a(仔细阅读!),然后把你的问题放在内联。关于模式,我不想建议你找到问题的解决方案,只想你找到一个模式来源的解释。
if(something){
    GameObject* newObject = new GameObject();
    ...
    hierarchy.push_back(newObject);
}