![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Fire-Plug |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: 1 Всего: 0 |
В статье по вышеуказ. ссылке http://rsdn.ru/article/baseserv/dlluse.xml как раз и рассматривается конкрентная техника как это сделать. Хотя надо сразу сказать, что это достаточно неудобно. Потому и шла речь о том, чтобы в DLL реализовать класс(ы) и способ его создания (фабрику объектов или что угодно) и по запросу только получать указатель на объект нужного типа. В DLL также нужно реализовать мехнизм удаления объекта по запросу или просто при ее выгрузке. --------------------
Объясни другому - поймешь сам (Народная примета) |
|||
|
||||
| chipset |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 2 Всего: 165 |
А в чём преимущество такого подхода? Почему бы просто не получать указатель на фабрику классов? Кстати, имхо, лучшим вариантом было бы:
А если обьектом пользуются сразу два процесса? Добавлено @ 22:21
А если два процесса на один обьект? --------------------
|
||||||||||
|
|||||||||||
| Fantasist |
|
||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Из обязательной части там только IUnknown реализовать нужно, да и его реализацию можно сделать ATL'ем. Регестрировать тоже не обязательно, можно создавать объект напрямую вызывая DllGetClassObject. Хотя я бы возвращал указатель на экземляр из dll. А в самом классе создал бы метод Destroy, который бы удалял сам себя, и перегрузил бы delete для него, чтобы он происходил через вызов Destroy(). В этом случае даже если delete будет вызван в основном модуле для указателя полученного из dll, объект удалится в dll. Добавлено @ 22:29
Вопросы синхронизации к данной теме не относятся. К тому же, один объект не может быть использован в разных процессах ибо у них разное адресное пространство (ну, конечно, это возможно, но только после дополнительных телодвижений). Добавлено @ 22:31
Преимущество в том, что не надо думать, как правильно создать и удалить объект. Это сообщение отредактировал(а) Fantasist - 15.4.2005, 22:31 -------------------- Волны гасят ветер... |
||||||
|
|||||||
| chipset |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 2 Всего: 165 |
Ещё ATL прикручивать...
Тогда это и есть мини-фабрика обьектов, как я её понимаю.. --------------------
|
||||||
|
|||||||
| Fire-Plug |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: 1 Всего: 0 |
У каждого процесса - своя память, в т.ч. динамическая. Ф-цию DLL может вызывать фуева хуча процесссов.
Сейчас поищу ссылку на статейку, к-рая рассказывает, как память DLL отображается на адресное пространство процесса. Все переменные, что экспортируются из/создаются кодом DLL - уникальны в адресном пространстве данного процесса и процесами не разделяются (not shared). Иначе, спрашивается, нахрена нужна была бы куча механизмов IPC(Inter-Process Communication), ежели бы переменные из разных процессов так запросто можно было бы share-ть. А вот исполняемый код - разделяется всеми процессами, к-рые юзают данную DLL. Ну, че искать статейку? Ваще ее в MSDN можно было года 3-4 назад легко найти. Только вот назывется больно обидно "DLL for beginners". --------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |