Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++。exe和.dll是否在.exe中使用相同的全局变量?_C++_Dll_External_Game Engine_Keyword - Fatal编程技术网

C++ c++。exe和.dll是否在.exe中使用相同的全局变量?

C++ c++。exe和.dll是否在.exe中使用相同的全局变量?,c++,dll,external,game-engine,keyword,C++,Dll,External,Game Engine,Keyword,我有一个游戏引擎,您可以在其中编写自定义脚本。我使用LoadLibrary()&GetProcAddress成功地使其工作并动态加载脚本,尽管它似乎被卡住了 我有一个.dll文件和一个.exe,它们都使用我创建的同一个引擎库。应用程序(.exe)初始化游戏引擎,因此它必须是我的全局单例变量的宿主 这是我的脚本的代码 #include "MyConsoleWriterComponent.h" #include "../DarkLightEngine/DLE_Engine.h" void MyCon

我有一个游戏引擎,您可以在其中编写自定义脚本。我使用LoadLibrary()&GetProcAddress成功地使其工作并动态加载脚本,尽管它似乎被卡住了

我有一个.dll文件和一个.exe,它们都使用我创建的同一个引擎库。应用程序(.exe)初始化游戏引擎,因此它必须是我的全局单例变量的宿主

这是我的脚本的代码

#include "MyConsoleWriterComponent.h"
#include "../DarkLightEngine/DLE_Engine.h"
void MyConsoleWriterComponent::OnTick()
{

    Atom* a = Atom::CreateAtom("Heyo");
    OutputDebugString(L"Text Text!\n");
}
Atom::CreateAtom使用单例将当前游戏实体注册到场景中。但是,如果在.exe中调用此方法,它会按预期工作(将Atom推入场景中,一切都很完美),但是当我导出此类并从.exe使用它时,似乎它没有注册到my.exe singleton

我在某个地方读到,您必须将单例标记为“volatile”变量,但它似乎提示了一些错误,例如某些结构不接受volatile变量(用于堆栈向量),还有一个名为extern的关键字,但每次我在我的单例上使用它时,都会出现错误“非法”存储类

在这件事上,我似乎遗漏了一个重要的概念


你能帮我一下吗?我非常感谢任何方向的意见。

Volatile与此无关。你的问题是你的dll是否能自动访问加载它的程序中的静态变量,答案是它不能。此外,您正在使用游戏引擎,并且在您的世界中生成实体时遇到问题,这一事实与此无关。试着把你的问题提炼成核心问题——在这种情况下,使dll自动访问加载它的程序中的静态变量-你们都会提出更好的问题,并且有更高的机会自己弄清楚。至于如何实现类似于你们想要的效果-我还没有完全考虑过这一点,但它应该给你一个很好的起点:创建一个全局变量所在的dll;让应用程序加载时间链接到该dll,游戏脚本dll加载时间链接到该dll,并使用该dll中的全局变量。一些阅读材料:谢谢你的闪电输入,我相信我会好好利用你的评论#1指令和评论#2,这似乎是我要实现的。