Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 543

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Проблема в следующем: Моя программа загружает dll статически,
саму dll - ку я поместил в exe , возможно ли на старте программы извлеч dll в "%SystemRoot%\System32" до появления ошибки отсутствия модуля?

DimonZ Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

DNK (статус: Студент), 19 марта 2009, 18:10 [#2]:

Кто вам мешает загрузить ее динамически?
"Digital Networked Knight"
min@y™

min@y™ (статус: Доктор наук), 19 марта 2009, 21:41 [#3]:

Самый интересный вопрос: А НАФИГА ТАКОЕ НАДО??
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DimonZ

DimonZ (статус: Посетитель), 21 марта 2009, 01:40 [#4]:

В том то и дело что я не могу извлечь dll - ку , извлечение dll я написал в файле проэкта до инициализации формы, при запуске проги вылетает ошибка об отсутсвии dll , тоесть получается что dll уже подключена статически, как же мне избежать статический вызов ?
Если я пишу что - то несуразное, тогда извиняйте я новичок в этом деле . . .
min@y™

min@y™ (статус: Доктор наук), 21 марта 2009, 08:36 [#5]:

Единственный выход - подключать DLL динамически.
И всё-таки я не понимаю, зачем хранить DLL внутри EXE?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ученый

Ученый (статус: 8-ой класс), 21 марта 2009, 08:38 [#6]:

что бы не украли наверное:))) Видно дллка не простая.....дрогоценная:)))
DNK

DNK (статус: Студент), 21 марта 2009, 10:52 [#7]:

2DimonZ: Конечно несуразное. Вам надо объяснять, что такое динамическое подключение DLL?
"Digital Networked Knight"
DimonZ

DimonZ (статус: Посетитель), 22 марта 2009, 13:25 [#8]:

Лана буду сам разбираться, а храню я её в exe лишь по одной причине , когда моя прога попадёт на другую железяку, то эта самая Dll будет нужна либо в директории с программой либо в System32 , я не хочу использовать инсталлятор, ведь это может сделать и программа, вообщем удобно при траспортировке . . .
DNK

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

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:53
Выполнено за 0.03 сек.