Я ищу способ координировать библиотеки DLL в одном и том же процессе, чтобы обеспечить механизм обмена данными между ними.Цель состоит в том, чтобы иметь один и тот же код общего доступа для всех библиотек DLL, и чтобы они координировались таким образом, чтобы первый, загруженный основной программой, действовал в качестве менеджера для общих элементов, в то время как другие будут использовать этот менеджер.Я не могу изменить основное приложение, поэтому невозможно настроить диспетчер и разделить его адрес памяти с другими библиотеками DLL.Набор библиотек DLL, использующих этот механизм, может варьироваться, поэтому я не могу явно предположить, что одна из них будет загружена.
Одним из решений, которое я рассмотрел, является добавление адреса памяти к переменным среды процесса.Первая DLL увидит, что переменная окружения еще не установлена, создаст объект менеджера и установит переменную по ее адресу.Другие библиотеки DLL увидят переменную и из этого создадут указатель на объект менеджера.
Это близко к тому, что я хочу, но кажется немного грубым, поскольку нет никакой гарантии, что переменная окружения не 'установить по какой-либо причине, и SetEnvironmentVariable / GetEnvironmentVariable может завершиться ошибкой по разным причинам.
Есть ли лучший способ справиться с этим?Я ищу способ хранения и получения именованного указателя в контексте процесса, но если у вас есть лучшее решение для основной проблемы взаимодействия библиотек DLL, я был бы рад принять это.