Многократные вызовы Dll друг друга функционируют через "основную" dll - PullRequest
0 голосов
/ 05 февраля 2011

Я создаю игровой движок (на c ++), который разбит на несколько проектов (компиляция для разделения библиотек DLL и библиотек на окнах и общих объектов в Linux), структура выглядит следующим образом:

                                    Main.exe

                                   Engine.dll

          Graphics Engine.dll Physics Engine.dll Sound Engine.dll ...dll

Main.exe инициализирует новый движок, а затем движок создает графические, физические и звуковые движки. Это все работает нормально, однако теперь я хочу, чтобы графический движок запускал функции, присутствующие в звуковом движке, но не напрямую, а через функцию в Engine.dll.

Однако есть проблема. Main включает в себя Engine, а Engine включает в себя графику, физику и звук. Если я сейчас скажу Графике, Физике и звуку включить Engine, а также передать ссылку на объект engine каждому соответствующему «подсистеме», то возникнет проблема с круговыми зависимостями ...

Как я мог заставить графический, физический и звуковой движок взаимодействовать с главным движком (поскольку на данный момент это только односторонние отношения, когда основной движок вызывает все функции вспомогательных движков)?

1 Ответ

1 голос
/ 05 февраля 2011

Вы можете предоставить интерфейс, используя абстрактный класс (т.е. с чисто виртуальными функциями) из Engine.dll. Затем реализуйте этот интерфейс в Engine.dll. Затем создайте экземпляр конкретного класса this и передайте ссылку / указатель этого экземпляра (как ссылку / указатель на абстрактный класс) в GraphicsEngine.dll. Теперь, когда GraphicsEngine необходимо связаться с Engine, он может использовать этот экземпляр. Поскольку вы используете только абстрактный класс, для этого не требуется, чтобы GraphicsEngine.dll был связан с Engine.dll. Так что не будет круговой зависимости.

...