Вам нужна третья сборка, чтобы действовать как интерфейс между ними. Эта сборка интерфейса будет экспортировать все необходимые объекты и / или методы, необходимые для взаимодействия двух других сборок.
Этот следующий пример, конечно, рассматривает .NET как платформу, но ту же самую точную концепцию можно использовать в проектах Win32 / C ++.
Это довольно сложно с точки зрения архитектуры. Две библиотеки DLL в .NET не могут напрямую взаимодействовать двумя способами без каких-либо накладных расходов, однако вы можете общаться одним способом. Причина в том, что вы можете ссылаться только на одну сборку из другой, в противном случае у вас будет циклическая ссылка.
Хотя есть простое решение, но для этого потребуются три сборки с вашей стороны. Возьмите следующие сборки:
- Interface.dll
- client.dll
- Server.dll
Только по именам вы сможете понять, как это будет работать. По сути, Interface.dll будет содержать открытые объекты, которые Client.dll и Server.dll должны будут взаимодействовать друг с другом. И Client.dll, и Server.dll будут ссылаться и Interface.dll для получения доступа к этим объектам.
При использовании этого метода обе сборки имеют доступ ко всем объектам, с которыми любой из них должен был бы общаться. Interface.dll также будет содержать открытые методы, которые должны взаимодействовать как Client.dll, так и Server.dll. Таким образом, он может содержать, например, методы «Отправить» и «Получить», которые могут использовать либо Client.dll, либо Server.dll.
Для этого вам придется разработать какой-то стандарт связи.
- Что эти сборки будут связываться друг с другом?
- Как эти сборки будут взаимодействовать?
С учетом этих двух факторов, независимо от того, передаете ли вы реальные классы и объекты или просто сообщения, третья сборка, которая справится с этим, будет работать безупречно, если приложить усилия к архитектуре и дизайну.
Не принимайте имена близко к сердцу, Client.dll, Server.dll и Interface.dll - это всего лишь примеры общей методологии выполнения такой задачи. При использовании этого метода не было бы циклических ссылок, и поэтому ваши сборки могли взаимодействовать двумя способами, а не одним.