Могу ли я создать второй экземпляр синглтона в DLL?

У меня есть статическая библиотека, которая содержит синглтоны. Мне нужно загрузить отдельный экземпляр этих синглетонов в одном процессе для целей тестирования.

Итак, я создал DLL, которая связывает ту же статическую библиотеку, и затем основной процесс загружает эту DLL.

Как только DLL пытается загрузиться, я получаю нарушения прав доступа при попытке получить доступ к статическим указателям экземпляров в синглетонах.

Некоторые сообщения, которые я прочитал, говорят, что это невозможно, и что мне нужен второй процесс, в то время как другие говорят, что каждая DLL получает свои собственные копии всех статических переменных в статической библиотеке, на которую она ссылается, что предполагает, что это должно работать ..

Возможно ли то, что я пытаюсь сделать?

0

Решение

В большинстве случаев синглтон действительно должен быть только одним — ваш запрос необычен.

Я знаю, что связывание статической библиотеки с DLL может привести к множеству экземпляров статических переменных, потому что я сам видел это. Каждая DLL или EXE получает свою собственную копию статической библиотеки через компоновщик и, таким образом, свою собственную копию статических переменных.

Нарушения доступа могут быть вызваны проблемами с порядком инициализации. Лучший способ контролировать это — убедиться, что статические переменные находятся внутри функции, которая инициализирует их точно в срок, а не глобальные переменные.

3

Другие решения

Других решений пока нет …