|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.01.2013, 15:51 | #1 |
Пользователь
Регистрация: 05.03.2012
Сообщений: 29
|
Как работать с одним экземпляром dll
Пишу dll - ку, которая предназначена для работы с некими USB устройствами. Теоретически данную dll-ку могут юзать различные приложения одновременно. dll -ка может перекрывать доступ к usb -девайсинам. Я бы мог организовать работу нескольких приложений с одним устройством в самой библиотеке, но при условии что все приложения общаются с одним экземпляром.
Я просто не совсем понимаю как устроена работа с бибилиотеками в Винде. Есть ли какая-то возможность всем приложениям работать в один момент времени с единственным экземпляром библиотеки в памяти? (библиотека может лежать как в system32 так и в папке с каждым приложением) В Приложения вмешиваться не могу. |
25.01.2013, 15:58 | #2 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
.SHARED секция в длл может спасти.
|
25.01.2013, 16:05 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
Можно перенести работу с устройством в свое ЕХЕ (которое запускается только раз) а DLL будет обеспечивать доступ к этому ЕХЕ любым удобны способом.
|
25.01.2013, 16:54 | #4 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,770
|
|
26.01.2013, 19:38 | #5 |
Пользователь
Регистрация: 05.03.2012
Сообщений: 29
|
а Шаред область она будет одна даже если dll может быть в папке у каждого приложения?
|
27.01.2013, 04:25 | #6 | |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Эта область будет одна только у модулей загруженных из одного файла длл.
Цитата:
Тогда действительно лучше службу или может длл в разных директориях будут обращатся к одной длл в системной папке. Проверку в коде длл (в системной папке она или нет) сделать не сложно, в DllMain проверить GetModuleFileName (hModule. Только вот не понятно, зачем нужны разные экземпляры длл. |
|
27.01.2013, 10:26 | #7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
Вместо того, чтоб пользоваться .SHARED секцией можно использовать CreateFileMapping() с определенным именем. Тогда общую память можно будет открывать хоть из одного DLL, хоть из разных.
Если будут отдельные DLL у каждого процесса, то это чревато. Во первых, тогда теряется смысл использования DLL а во вторых сильно увеличивается вероятность того, что DLL будут разных версий, что может привести к интересным результатам. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как работать с 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 |