C++. Включение и линковка скомпилированных файлов в работающий экземпляр программы?
Всем доброго времени суток.
Сразу скажу, с С++ знаком около 2-х месяцев.
Разрабатываю 2D игровой движок(на либах SFML+Box2D с инклюдом JSON & ImGUI). Под конец разработки встал вопрос о разработке различных проектов(игр) на одном экземпляре движка. Решение, конечно, прямое - ядро движка в виде динамической библиотеки. Редактор - приложение на основе этого ядра.
И здесь встал вопрос о том, как в рантайме редактора получить возможность использования скомпилированного файла(скрипта, так же C++)? И верно ли думать, что если динамическая библиотека ядра загружена в памяти, то запуск скрипта, некоторым образом линкующего к ядру(и к его некоторой базе знаний о скриптах) даст нужный эффект в редакторе(который линкуется к этой же копии ядра в RAM)?
ОС Linux и windows оперируют процессами, то есть приложениями, которым выделяется независимая память и доступ к которой из других процесов ограничивается самой ОС. Редактор это процесс, в который загружаются библиотеки (для windows в основном exe, dll, как в вашем случае SFML+Box2D). Библиотека это контейнер с скомпилированным бинарным кодом и ресурсами.
Линковка это подключение откомпилированных библиотек исходного кода, к вашему коду. Линковка это действие компилятора.
Процесс может загрузить dll с помошью функции LoadLibrary и затем вызвать любую экспортируемую функцию.
1) В C++ нативной рефлексии нет. Не нативная, ну.. понятно думаю.
2) Динамические библиотеки и так будут, но весь механизм, который должен быть реализован на крестах и является вопросом.
Как возможный вариант(вопрос всё ещё открыт!):
Приложение-редактор по команде компилирует дин. библиотеку из скриптов игры и перелинкуется к ней(то самое включаение скрипта в эдитор).