今天,我试图让编辑&继续在我的解决方案,它看起来像这样的工作:多个C++ .lib项目到.dll项目,Lua崩溃!
游戏引擎的.lib < - 游戏的.lib < - 编者.EXE
<- Server .exe
<- Client .exe
其中一期工程很好。但是现在我想将引擎和游戏.libs转换为.dll文件,因此我可以使用Visual Studio C++的继续编辑功能。
因此,我得到了一堆“__declspec(dllexport)”在那里等工程就好,它运行!
但在某些情况下,它崩溃。实际上,它总是在与释放内存相关的Lua函数中崩溃。
引擎和游戏都与Lua一起工作,它们都有自己的静态C++接口函数。
我不确定,但我想.dll有点像没有主函数的.exe,每个都有自己的内存。因此,当例如Game.dll导致Lua分配一些内存,并且Engine.dll导致Lua再次释放它时,繁荣!正确?
关于如何解决这个问题的任何想法?当然Engine.dll应该负责Lua,但是Game.dll应该能够用新的静态函数来扩展接口。
编辑:没有更多的崩溃后,我把Lua本身变成一个.dll。在我尝试这个之前,我还使用与所有其他项目相同的编译器重新编译了静态,并且我重复检查了运行时库,并且它们都是相同的,并且我正在链接到正确的调试/版本库。我仍然很好奇这里发生了什么。
有一个愉快的一天,
安东
附:为什么我无法控制Stackoverflow的回报?
这是答案,谢谢先生!是的,我静态链接到Engine.dll和Game.dll,因为最初Engine.lib会链接它,而Game.lib会自动继承这些符号。 是的,把Lua变成一个dll来修复它。 非常有趣的bug =)。 – Xilliah 2010-08-03 12:59:09