2011-01-07 1 views
3

У меня есть DLL, в которой определен синглтон.C++, несколько экземпляров dll, singleton

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

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

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

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

+0

Используйте синглтон, получите то, за что платите. – Puppy

+1

@Sanja: Вопрос, который вы связываете, касается DLL, используемых в нескольких приложениях, имеющих один синглтон. Этот вопрос касается dll, используемых в одном приложении, имеющем несколько синглетонов. – interjay

+1

@moala: Почему (и как), по вашему мнению, вы загружаете несколько экземпляров DLL в одном приложении? – interjay

ответ

1

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

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

1

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

Вам нужно будет написать нестандартный «singleton», чтобы получить несколько объектов.

1

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

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

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

+0

Ну, хорошая идея обертывания. Может быть большой или небольшой работой в зависимости от многих параметров. – moala