Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с копией dll  (Прочитано 9249 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 09-12-2009 04:53 » 

Абстрактрый вопрос: имеется "A.dll" , неважно, что в ней содержится. Эту dll используют несколько приложений. Важно обеспечить, чтоб файл dll, используемый приложениями, был одинаков, это проще всего сделать, если dll - физически один файл, а приложения цепляют её. Какие проблемы возможны, если использовать несколько абсолютно точных копий dll, то есть, фактически, разные приложения будут цепляться к разным dll (разным файлам, но ведь эти файлы - точные копии!)?

Если запутал, то на картинках:

первый вариант - файл DLL один
Код:
1.exe  <-,
2.exe  <-|--- d:\1\A.dll
3.exe  <-'

второй вариант - файлов DLL несколько, но они одинаковые
Код:
1.exe  <----- d:\1\A.dll
2.exe  <----- d:\2\A.dll
3.exe  <----- d:\3\A.dll

Всегда ли эти два варианта однозначно одинаково будут работать при условии, что файлы dll - точные копии ?
« Последнее редактирование: 09-12-2009 05:30 от Sel » Записан

RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 09-12-2009 06:32 » 

Леш, в MSDN описан порядок поиска библиотек на диске при автоматической загрузке и при ручной загрузке без указания абсолютного пути.

Исполняемый модуль идентифицируется по полному пути. Т.е. если загрузятся библиотеки из разных мест, то это будут разные модули.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 09-12-2009 07:08 » 

что разные - это понятно, вопрос в том, когда возникнут конфликты ? Ведь содержимое (функции, переменные, ресурсы) в них одинаковые, что теоретически может поломаться ?
Записан

RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 09-12-2009 07:35 » 

Статические переменные разные и могут быть разными разделяемые между потоками системные ресурсы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 09-12-2009 07:39 » 

Лёш, они загрузятся в своё адресное пространство и ничего не случится. В этом смысле какая разница - много копий или только один оригинал. Всё-равно система для каждого обращения создаёт свою "копию".
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 09-12-2009 07:40 » 

ясно, спасибо
Записан

RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 09-12-2009 07:45 » new

Жень, копия кода в памяти то одна и много.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 09-12-2009 08:03 » 

Каждый процесс получает свою виртуальную "копию" библиотеки, неважно об это с одной dll (как это происходит в большинстве случаев), или с разных копий.
Пример, для работы UNICODЕ программы на 9х платформах МС предусмотрели специальный механизм - MSLU, но для этого нужно чтобы все задействованные модули были скомпилированы с этой библиотекой, включая MFC. Таким образом мы поставляем с пакетом "свою" копию MFC с поддержкой юникодного слоя. Все наши экзешники работают через неё, что не мешает существовать в системе другим MFC библиотекам. Точно таким же образом это могла быть "точная" копия оригинальной MFC. Я помню ещё времена, когда отличие даже в 7ом знаке после запятой в номере версии приводили к неадекватному поведению програму на целевой платформе. Я уже не говорю о том, что некоторые производители умудрялись засунуть в common библиотеки MFC или V-Бейсика некие свои ключи, для "подчёркивания индивидуальности" своей проги, которая ессно удалялась после очередного апдейта или установки другой проги со своими библиотеками. Тогда-то у нас и был введён стандарт: 1. Компиляция конечного продукта только на образцовм копмьютере 2. Установка ВСЕХ файлов программы (за исключением системных dll) в свой собственный фолдер.
« Последнее редактирование: 09-12-2009 08:55 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 09-12-2009 08:49 » 

2. Установка ВСЕХ файлов программы (за исключением системных dll) в свой собственный фолдер.

вот и я позавчера к такому же стандарту медленно и печально вышел Улыбаюсь
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines