Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2013, 15:51   #1
mr_cipher
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 29
По умолчанию Как работать с одним экземпляром dll

Пишу dll - ку, которая предназначена для работы с некими USB устройствами. Теоретически данную dll-ку могут юзать различные приложения одновременно. dll -ка может перекрывать доступ к usb -девайсинам. Я бы мог организовать работу нескольких приложений с одним устройством в самой библиотеке, но при условии что все приложения общаются с одним экземпляром.

Я просто не совсем понимаю как устроена работа с бибилиотеками в Винде.

Есть ли какая-то возможность всем приложениям работать в один момент времени с единственным экземпляром библиотеки в памяти?

(библиотека может лежать как в system32 так и в папке с каждым приложением)

В Приложения вмешиваться не могу.
mr_cipher вне форума Ответить с цитированием
Старый 25.01.2013, 15:58   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

.SHARED секция в длл может спасти.
EUGY вне форума Ответить с цитированием
Старый 25.01.2013, 16:05   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Можно перенести работу с устройством в свое ЕХЕ (которое запускается только раз) а DLL будет обеспечивать доступ к этому ЕХЕ любым удобны способом.
waleri вне форума Ответить с цитированием
Старый 25.01.2013, 16:54   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Можно перенести работу с устройством в свое ЕХЕ (которое запускается только раз)
Во-во, такой exe называют еще службой.
Vapaamies вне форума Ответить с цитированием
Старый 26.01.2013, 19:38   #5
mr_cipher
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 29
По умолчанию

а Шаред область она будет одна даже если dll может быть в папке у каждого приложения?
mr_cipher вне форума Ответить с цитированием
Старый 27.01.2013, 04:25   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Эта область будет одна только у модулей загруженных из одного файла длл.
Цитата:
(библиотека может лежать как в system32 так и в папке с каждым приложением)
.
Тогда действительно лучше службу или может длл в разных директориях будут обращатся к одной длл в системной папке. Проверку в коде длл (в системной папке она или нет) сделать не сложно, в DllMain проверить GetModuleFileName (hModule.
Только вот не понятно, зачем нужны разные экземпляры длл.
EUGY вне форума Ответить с цитированием
Старый 27.01.2013, 10:26   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Вместо того, чтоб пользоваться .SHARED секцией можно использовать CreateFileMapping() с определенным именем. Тогда общую память можно будет открывать хоть из одного DLL, хоть из разных.

Если будут отдельные DLL у каждого процесса, то это чревато. Во первых, тогда теряется смысл использования DLL а во вторых сильно увеличивается вероятность того, что DLL будут разных версий, что может привести к интересным результатам.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работать с Dll? двоечник Общие вопросы Delphi 4 08.11.2010 14:51
С++. Что и как можно внести в DLL и как потом с этим работать? dampirik Помощь студентам 5 21.09.2009 08:19
Метод для класса который будет работать с будующим экземпляром SunKnight Общие вопросы .NET 7 12.05.2009 20:25
Как заставить работать dll ? Volkogriz Общие вопросы Delphi 10 13.12.2007 10:24
Как работать с dll файлами Artem Общие вопросы Delphi 7 21.09.2007 13:45