Строго говоря, преобразование в DLL-файлы в основном сократит связывание времени, но вы можете заметить (в большинстве случаев едва заметное) снижение производительности, поскольку теперь «оптимизация всей программы» имеет гораздо меньше возможностей для оптимизации, например, встроенные функции в разных двоичных файлах.
Динамически связанные библиотеки и статически связанные библиотеки - совершенно разные звери, библиотеки DLL требуют гораздо большего внимания. Вам необходимо тщательно спроектировать их общедоступный API и определить его соответствующим образом (обычно с помощью макросов, подобных представленным вами). Например. не рекомендуется использовать стандартные типы библиотек (и многие другие) в публичном API DLL, которые зависят от конкретного типа среды выполнения C (например, отладки и выпуска) - в основном речь идет о выделении памяти в одном двоичном файле и освобождении в другом, чего следует избегать. Но это не всегда проблема.
Нет особого смысла переключаться между статическими и динамическими библиотеками.
Статические библиотеки обычно намного проще и не заботятся об общедоступном API, поскольку все автоматически доступно извне. Например. Математические библиотеки обычно являются статическими, поскольку почти все функции должны быть экспортированы в любом случае, и они (как правило) не имеют сложной внутренней "бизнес" логики.
Большие библиотеки с «бизнес-логикой», которую вы хотели бы скрыть (например, чтобы иметь больше свободы для ее изменения) и с четко определенным общедоступным API, приносят долгосрочные выгоды. Например. Вы можете обновить только небольшую DLL вместо огромного монолитного EXE, если API не был изменен.
Поскольку сложно тщательно планировать заранее, необходимость конвертировать статическую библиотеку в DLL (один раз) возникает довольно часто по мере развития проекта. В этом случае вам не нужно экспортировать каждый класс и функцию, но нужно тщательно выбирать, что именно нужно экспортировать, и в идеале реорганизовать существующий API, чтобы лучше соответствовать новой реальности. К счастью, кажется, что у вас нет циклических зависимостей, поскольку они могут добавить много головной боли.
Рефакторинг неизбежно усложняется в библиотеках DLL, но это не должно быть большой проблемой. Если ваша библиотека выглядит так, как будто она должна быть DLL - сделайте ее DLL, то преимущества будут больше, чем недостаток нелегкого копирования / вставки.
Из вашего примера, с очень ограниченными знаниями, так что это просто догадки, похоже, что только физика и, возможно, графика должна быть DLL, вероятно, BaseGame тоже.