| 
| 
 | Вопрос # 2 543/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Проблема в следующем: Моя программа загружает dll статически,
 саму dll - ку я поместил в exe , возможно ли на старте программы извлеч dll в "%SystemRoot%\System32" до появления ошибки отсутствия модуля?
 
|  |   Вопрос задал: DimonZ (статус: Посетитель)Вопрос отправлен: 19 марта 2009, 17:07
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, DimonZ!Если библиотека грузиться статически, то она загружается в память загрузчиком ещё до выполнения кода Вашей программой. И ругается на отсутствие библиотеки не Ваша программа, а загрузчик приложений виндовс.
 А так как ещё никакой код к этому времени не выполняется - то ничего не получиться. Хранить длл в ресурсах - плохая практика. Для решения этой проблемы создали инсталляторы.
 Да, кстати, скопировать в %SystemRoot%\System32 может никто и не дать. Под Вистой/Севен это может быть проблема. Лучше длл держать рядом возле себя. Да и нечиво загрязнять системный каталог - он и так замусоренный.
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 19 марта 2009, 17:22
 
 |  
 Мини-форум вопросаВсего сообщений: 12; последнее сообщение — 22 марта 2009, 17:36; участников в обсуждении: 5. 
|   | Ученый (статус: 8-ой класс), 19 марта 2009, 17:12 [#1]:ну а кто вам не дает сделать так: извлечь, затем проверить что длл извлеклась, а только потом подключить ее? |  
|   | DNK (статус: Студент), 19 марта 2009, 18:10 [#2]:Кто вам мешает загрузить ее динамически? "Digital Networked Knight" |  
|   | min@y™ (статус: Доктор наук), 19 марта 2009, 21:41 [#3]:Самый интересный вопрос: А НАФИГА ТАКОЕ НАДО?? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | DimonZ (статус: Посетитель), 21 марта 2009, 01:40 [#4]:В том то и дело что я не могу извлечь  dll - ку , извлечение dll я написал в файле проэкта до инициализации формы, при запуске проги вылетает ошибка об отсутсвии dll , тоесть получается что dll уже подключена статически, как же мне избежать статический вызов ? Если я пишу что - то несуразное, тогда извиняйте я новичок в этом деле . . .
 |  
|   | min@y™ (статус: Доктор наук), 21 марта 2009, 08:36 [#5]:Единственный выход - подключать DLL динамически. И всё-таки я не понимаю, зачем хранить DLL внутри EXE?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | DNK (статус: Студент), 21 марта 2009, 10:52 [#7]:2DimonZ: Конечно несуразное. Вам надо объяснять, что такое динамическое подключение DLL? "Digital Networked Knight" |  
|   | DimonZ (статус: Посетитель), 22 марта 2009, 13:25 [#8]:Лана буду сам разбираться, а храню я её в exe лишь по одной причине , когда моя прога попадёт на другую железяку, то эта самая Dll будет нужна либо в директории с программой либо в System32 , я не хочу использовать инсталлятор,  ведь это может сделать и программа, вообщем удобно при траспортировке .  .  . |  
|   | DNK (статус: Студент), 22 марта 2009, 14:01 [#9]:  
 Не полечу в Австралию на самолёте - дайте билет на скорый поезд!
 "Digital Networked Knight" |  
|   | Вадим К (статус: Академик), 22 марта 2009, 16:32 [#10]:Тогда может сделать распаковщик? То есть, саму программу завернуть в третью, куда и длл завернуть. И она будет распаковывать и запускать. НО! в system32 копировать не надо, ни зачем засорять. А распаковывать можно в temp и не морочить говору (ехе туда же). Но. зачем выдумывать то, что давно уже решено. инсталлятор и никакой мороки. Либо отказываться от длл.
 Сама такая распаковка очень нелюбима многими антивирусами и фаерволами, так что если хотите лишние вопросы по поводу неработоспособности программы - вперёд!
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ученый (статус: 8-ой класс), 22 марта 2009, 17:03 [#11]:а в  system32 вам ось может и не дать распаковать....у вас просто может не быть прав администратора....и тогда вся эта затея накроется медным тазом..... И вообще какая-то очень странная и подозрительная затея.... программы наоборот стараются упаковать в инстоляции для удобства какраз переноса....за исключением вредоносного ПО конечно.... так что это очень странно, не замышляете ли чего , противоречащее законодательству ?
   |  
|   | Вадим К (статус: Академик), 22 марта 2009, 17:36 [#12]:По поводу копирования в System32 я писал в ответе... так что эта часть уже освещена.  А вот упаковка разными упаковщиками якобы для улучшения - это очень плохое дело. Просто Windows постоена интересно и она не подгружает весь exe в память, а по мере надобности. Также нет необходимости сбрасывать его в своп - можно ведь всегда подчитать с диска (именно по этой причине нельзя удалять с диска запущенную программу). А всякие распаковщики распаковывают её в память, при маленьком кол-ве ОЗУ приходиться сбрасывать её в своп... плохо это все. Выгоды никакой, одни тормоза.
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |