Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];

Вниз

Загрузка Dll   Найти похожие ветки 

 
BlackCat   (2003-03-19 18:45) [0]

Как LoadLibrary приспособить к загрузки не из файла а из памяти. Или может создания файла в памяти.
Проблема в том, что есть Dll(её содержимое) и необходимо вызвать функцию из неё. Или может создать нечто похожее на DLL ручками?


 
Clickmaker   (2003-03-19 18:54) [1]

Так содержимое же не из воздуха берется, наверно. Сохранить в файл и Load


 
AlexRush   (2003-03-20 11:17) [2]

BlackCat >> "есть Dll(её содержимое" - обьясни конкретнее, что значит "Содержимое" и что значит "Есть".
Стандартные LoadLibrary и LoadLibraryEx могут загрузить PE модуль только из файла.
" создать нечто похожее на DLL ручками" - можно в рантайме создать кусок кода, но необходимо будет учесть все поправки(Relocations) - довольно мутное занятие. Я немного занимаюсь подобными вещами, опиши конкретно проблему - может чем помогу.


 
BlackCat   (2003-03-21 09:16) [3]

Смысл в том, что хочу сделать свой Install`ер. И к EXE файлу буду прикреплять модули DLL, которые он должен использовать.
EXE их читает в память(полностью всё содержимое, начиная с MZ и до конца) Необходимо выловить экспортируемые функции и выполнить.


 
Digitman   (2003-03-21 09:29) [4]

А ты считаешь, что образ библиотеки, загруженной в память таким примитивным образом, готов к использованию ? Т.е. никаких доп.действий (кроме получения каким-то образом адресов эксп.ф-ций) штатный сист.загрузчик не выполняет ? "бросил файл библ-ки в память" - и все ? готово к применению ?


 
Игорь Шевченко   (2003-03-21 09:31) [5]

Хороший инсталлер сохраняет DLL из ресурсов DLL во временный каталог и запускает функции стандартным образом (LoadLibrary, GetProcAddress и т.п.) - примеры - MSI, InstallShield и т.д.
Не надо изобретать велосипед с квадратными колесами - не поедет.


 
Digitman   (2003-03-21 10:37) [6]

Кр.того (как вполне разумная альтернатива твоему будущему "велосипеду с квадратными колесами"), есть готовый (пока еще - OpenSource) инсталлятор InnoSetup3 (with Pascal Script Extension). Результат его работы - один единственный исп.файл дистрибутива, содержащий "в одном флаконе" все, что необходимо для инсталляции конкретного прогр.продукта, т.е. как раз то, что тебе требуется (судя по вопросу). Если же по ходу инсталляции тебе нужны вызовы каких-то ф-ций из каких-то собственных DLL, то и это вполне можно обойти : секция [code] скрипта инсталляции может содержать Паскаль-текст, реализующий нужный алгоритм. Иными словами - функциональность DLL, участвующих в процессе инсталляции, просто переносится (в дан.случае - в виде текста Паскаль-программы в секции [code] скрипта) в исп.код результирующего EXE-файла - инсталляционного дистрибутива.


 
BlackCat   (2003-03-23 23:55) [7]

А велик с квадратными колёсами всё-же нужен. Такова задача, чтобы не сохранять файлы во всякие Temp-каталоги. И где найти этот InnoSetup3. Digitman ©, я понимаю, что не всё так просто, там ещё инициализировать DLL надо всякими там DllMain. Но может где пример есть, я же за советом прищёл, чтобы секономить время!!! А на DLL строиться вся оболочка. Но DLL это слижком жирно, может есть какой другой способ выдирания готового откомпилированного кода?


 
Digitman   (2003-03-24 08:48) [8]


> BlackCat


http://www.innosetup.com


> я понимаю, что не всё так просто, там ещё инициализировать
> DLL надо всякими там DllMain


Вызов DllMain - лишь финальный этап загрузки/инициализации библ-ки ! Работа сист.загрузчика при загрузке любого PE-модуля (не только DLL) весьма сложна и изощренна, и отнюдь не сводится только к копированию файла модуля в память процесса (да и копирование происходит вовсе не так примитивно, как ты себе представляешь) и вызову DllMain




Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
3-70151
Igor Mish
2003-05-01 20:44
2003.05.22
Что такое CalcOp1 в Rave ?


1-70229
Kardash
2003-05-10 12:10
2003.05.22
Как извлечь месяц из даты ???


1-70252
Litvin
2003-05-12 10:54
2003.05.22
округление значения аргумента


11-70198
CrazyAngel
2002-08-16 20:27
2003.05.22
ComboBox+Runtime Error


1-70367
Zew
2003-05-10 13:14
2003.05.22
Узнать время!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский