У меня есть статическая библиотека, которая содержит синглтоны. Мне нужно загрузить отдельный экземпляр этих синглетонов в одном процессе для целей тестирования.
Итак, я создал DLL, которая связывает ту же статическую библиотеку, и затем основной процесс загружает эту DLL.
Как только DLL пытается загрузиться, я получаю нарушения прав доступа при попытке получить доступ к статическим указателям экземпляров в синглетонах.
Некоторые сообщения, которые я прочитал, говорят, что это невозможно, и что мне нужен второй процесс, в то время как другие говорят, что каждая DLL получает свои собственные копии всех статических переменных в статической библиотеке, на которую она ссылается, что предполагает, что это должно работать ..
Возможно ли то, что я пытаюсь сделать?
В большинстве случаев синглтон действительно должен быть только одним — ваш запрос необычен.
Я знаю, что связывание статической библиотеки с DLL может привести к множеству экземпляров статических переменных, потому что я сам видел это. Каждая DLL или EXE получает свою собственную копию статической библиотеки через компоновщик и, таким образом, свою собственную копию статических переменных.
Нарушения доступа могут быть вызваны проблемами с порядком инициализации. Лучший способ контролировать это — убедиться, что статические переменные находятся внутри функции, которая инициализирует их точно в срок, а не глобальные переменные.
Других решений пока нет …