Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2010, 12:33   #1
Obsever0
Пользователь
 
Регистрация: 03.06.2010
Сообщений: 19
По умолчанию Dll в ресурсах и вызов функций из нее

Подскажите, пожалуйста, если такое вообще возможно сделать:
Dll MyDll "MYDLL.dll" - вот таким образом с расширением rs помещаю dll в ресурс
Потом компилю, или как это назвать, получается файл с расширением .RES и объемом равным объему dll.
Подключаю ее к проекту {$R s1.RES}
И вот теперь вопрос. Как вызвать функцию,которая в dll, не записывая содержимое потока в файл?Т.е. вызвать функцию из потока, или из ресурса?
Obsever0 вне форума Ответить с цитированием
Старый 03.06.2010, 13:23   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Загрузите ее динамически в память..
p51x вне форума Ответить с цитированием
Старый 03.06.2010, 13:41   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Это сложно, фактически нужно "вручную" правильно развернуть PE-образ в памяти, обработать релоки, таблицу экспорта... то есть сделать всю ту работу, которую обычно выполняет загрузчик.
http://www.rsdn.ru/article/baseserv/peloader.xml
пыщь
JTG вне форума Ответить с цитированием
Старый 03.06.2010, 13:51   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...зачем вообще подобные извращения, не проще-ли юнитом оформить.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.06.2010, 13:56   #5
Obsever0
Пользователь
 
Регистрация: 03.06.2010
Сообщений: 19
По умолчанию

Спасибо, за ответы.
1. p51x - ты имеешь в виду динамически загрузить длл в память?
2. JTG - знаком с этой статьей. Это действительно сложно
3. raxp. Это нужно для того что dll-ка не болталась рядом с проектом, чтобы ее случайно не удалил Юзверь. Ты имеешь ввиду сделать из dll еще один модуль?
И тогда еще вопрос.Что если из dll сделать ocx библиотеку, зарегистрировать ее и попробовать пользоваться.Только что пришла эта мысль в голову.
Obsever0 вне форума Ответить с цитированием
Старый 03.06.2010, 14:06   #6
bitSoft
Programming...
Форумчанин
 
Аватар для bitSoft
 
Регистрация: 13.03.2010
Сообщений: 198
По умолчанию

да можна и с .ocx , да луче сделаи как сказал raxp зделаи в один модуль
Код:
With TProgrammersForum.Create do  AddNewTopic('Title','Content...');
bitSoft вне форума Ответить с цитированием
Старый 03.06.2010, 14:12   #7
Obsever0
Пользователь
 
Регистрация: 03.06.2010
Сообщений: 19
По умолчанию

Жаль, но это исключено. Dll чужая и нет исходников, поэтому модуль ни как не сделать
Obsever0 вне форума Ответить с цитированием
Старый 03.06.2010, 14:15   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

слушайте, ну что за извращения, посмотрите нормальные программы, они хранят свои DLL либо рядом с собой, либо в папке System32.
и уж точно никто так не извращается.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.06.2010, 12:42   #9
Obsever0
Пользователь
 
Регистрация: 03.06.2010
Сообщений: 19
По умолчанию

Наконец-то!Получилось, напишу как это сделать, возможно в будущем кому-то пригодится:
1) Засовываем dll в ресурс - как это сделать много источников
2) Скачиваем из интернета TFakeDll - к нему хорошая документация на русском
3)
- FindResource(GetModuleHandle(nil) ,<имя рерурса>,<тип ресурса>);
- LoadResource(GetModuleHandle(nil) ,<возврат от первого шага>)
- po:=LockResource(<возврат второго шага>);//вернет указатель на ресурс(из ответа Пепела Феникса)
4) FakeDll.InjectDll( po, true); - функция из модуля FakeDll
Proc := FakeDll.GetFDProcAddress(Proc1Name) ; - Proc1Name - имя из dll функции, которая находится в ресурсе
Proc; - опля,вызываем и получаем результат!!!
Obsever0 вне форума Ответить с цитированием
Старый 09.06.2010, 12:51   #10
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
4) FakeDll.InjectDll( po, true); - функция из модуля FakeDll
Proc := FakeDll.GetFDProcAddress(Proc1Name) ; - Proc1Name - имя из dll функции, которая находится в ресурсе
Proc; - опля,вызываем и получаем результат!!!
Не проше так:

GetProcAddress
VintProg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать какртинку и получить картику из dll?(она не в ресурсах) puga555 Общие вопросы Delphi 7 22.12.2009 16:37
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Повторный вызов функций Roman Общие вопросы C/C++ 1 10.06.2009 14:48
Вызов функции из dll-ки VVVadim Общие вопросы Delphi 2 28.04.2009 10:37
вызов из dll не ShowModal. Roof Общие вопросы Delphi 7 25.07.2008 15:22