C ++, несколько экземпляров DLL, синглтон - PullRequest
3 голосов
/ 07 января 2011

У меня есть DLL, в которой определен синглтон.

У меня есть приложение, которое может загружать несколько экземпляров этой DLL.

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

Я заметил, что был только один экземпляр-одиночка для нескольких экземпляров DLL. Зачем? Как я могу решить это (если это возможно, не превращая синглтон во что-то еще)?

Спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 07 января 2011

Нельзя обойтись без рефакторинга вашего кода.DLL загружается в пространство процесса.Любой определенный в нем статический член является статическим для процесса (загруженная DLL не имеет собственной памяти).

Вам потребуется написать нестандартный "singleton" для получения нескольких объектов.

1 голос
/ 07 января 2011

А если у вас нет источников в dll, то вы должны загрузить его в разные процессы, по одному "singleton" на процесс.Это могут быть простые дочерние процессы вашего основного процесса, которые просто обрабатывают коммуникационную часть dll.

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

Как правило, если вы используете dll для выполнения более пары простых вызовов, вероятно, проще реорганизовать собственный код.

1 голос
/ 07 января 2011

Вы упомянули, что у вас есть несколько экземпляров в вашем приложении , что означает, что все они живут в одном процессе.

Синглтоны, как и любой другой статический член, ограничены одним на приложение, независимо от того, принадлежат ли они объекту, загруженному из DLL и т. Д.

...