Наше текущее приложение представляет собой один OpenGL EXE-файл, содержащий несколько страниц. EXE отвечает за доступ к данным, передаваемым по сети через UDP. Он накапливает данные и сохраняет их во множестве одноэлементных структур. Отдельные страницы в EXE обращаются к одноэлементным структурам для обработки данных по своему усмотрению.
В попытке облегчить работу нашего EXE-файла и поддержать наши попытки управления конфигурацией, мы решили разделить страницы на одну DLL, которую будет загружать EXE-файл. Мы хотим, чтобы EXE был оболочкой, в которую будут загружаться страницы из DLL. EXE все равно будет нести все обязанности по связи (UDP, Corba, User и т. Д.). Страницы будут по-прежнему отвечать за отображение того, что они делают.
Вопрос (наконец-то) звучит так: как передать это множество данных, собранных из EXE-файла, на страницы, основанные на использовании DLL. Концепция Синглтона больше не держит воду, так как используемые нами синглтоны (ACE_Singleton) не позволяют этот уровень направления. Мы можем экспортировать синглтоны из DLL в потребляющий EXE-файл весь день, но мне еще предстоит выяснить обратное. Я предложил следующие варианты - ни один из них мне не нравится, поэтому я надеялся, что кто-то найдет лучший вариант:)
- Сверните все данные, которые в настоящее время хранятся в отдельных синглетах, в другую DLL, которая экспортирует «истинный» синглтон. Например. Синглтон, экспортируемый из DLL, будет одинаковым - независимо от того, какой EXE-файл его загрузил - вроде как разделяемая память. Это интригующий выбор, но он может вызвать проблемы со сценариями развертывания. Я мог бы подробно рассказать об этих проблемах, если бы люди действительно были поражены этой идеей.
- Создание статической структуры уровня DLL, которая содержит все соответствующие данные. EXE будет загружать эти данные в DLL при загрузке DLL, чтобы страницы, содержащиеся в DLL, имели доступ к данным. Это кажется самым простым решением - даже если оно влечет за собой редактирование каждой страницы в нашем приложении - более 100. Это также кажется немного неаккуратным. Все данные только в глобальном. Не очень сексуально или C ++ y либо.
Так, у кого-нибудь еще есть решение этой проблемы?
Приложение написано с использованием Visual C ++ 9.0 (VisualStudio 2008) для использования в Windows XP. По какой-то причине Vista еще не поддерживается в нашей лаборатории, хотя наши клиенты используют ее.