Сегодня я попытался получить Редактировать & продолжать работать в моем решении, которое выглядит следующим образом:Несколько проектов C++ .lib для проектов .dll, сбоев Lua!
Game Engine .LIB < - Игра .LIB < - Редактор .exe
<- Server .exe
<- Client .exe
, который работает мило. Но теперь я хотел включить движок и файлы .libs в DLL, поэтому я могу использовать функцию Edit & Continue для визуальной студии C++.
Таким образом, я получил кучу «__declspec (dllexport)» там и т. Д. Работает просто отлично, он работает!
Но в определенных ситуациях он падает. Фактически, он всегда сбой в функции Lua, связанной с освобождением памяти.
Двигатель и игра работают вместе с Lua, оба они имеют свои собственные статические функции интерфейса C++.
Я не уверен, но я полагаю .dll немного похож на .exe без основной функции, и у каждого есть своя собственная память. Итак, когда, например, Game.dll заставляет Lua выделять некоторую память, а Engine.dll заставляет Lua снова освобождать его, бум! Верный?
Любые идеи о том, как это решить? Конечно, Engine.dll должен отвечать за Lua, но Game.dll должен иметь возможность расширять интерфейс новыми статическими функциями.
EDIT: Больше не было сбоев после того, как я превратил Lua в DLL. Прежде чем я попробовал это, я также перекомпилировал статику с тем же компилятором, что и все другие проекты, и я дважды проверил библиотеки времени выполнения, и они все одинаковы, и я привязываюсь к правильным библиотекам debug/release. Мне все еще интересно, что здесь происходит.
Иметь хороший день,
Antoon
P.S. Почему у меня нет контроля над возвратами в Stackoverflow?
Это ответ, спасибо, сэр! Да, я статически привязывал его к Engine.dll и Game.dll, потому что первоначально Engine.lib связывает его, и Game.lib автоматически наследует символы, конечно. И да, превратив Lua в dll, это исправлено. Очень интересная ошибка =). – Xilliah