|
Вопрос # 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 в память, а по мере надобности. Также нет необходимости сбрасывать его в своп - можно ведь всегда подчитать с диска (именно по этой причине нельзя удалять с диска запущенную программу). А всякие распаковщики распаковывают её в память, при маленьком кол-ве ОЗУ приходиться сбрасывать её в своп... плохо это все. Выгоды никакой, одни тормоза.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|