![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| ftooper |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.4.2011 Репутация: нет Всего: нет |
С помощью
загружаю дллку в мой файл. Потом эта длл таким же образом пытается загрузить ещё одну длл, но DLLI:=0, почему такое происходит, и как загрузить из длл другую длл? Путь до дллки 100% верный. |
|||
|
||||
| 504GateWay |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.4.2011 Репутация: нет Всего: нет |
попробуй получить хендл файла через CreateFile
если не сможеш, то что-то у него с путем или правами у тебя |
|||
|
||||
| ftooper |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.4.2011 Репутация: нет Всего: нет |
Если его загружать не из dll, то он загружается.
То есть если делать так exe загружает dll2 то всё ОК, а если так: exe загружает dll1, dll1 загружает dll2 то dll2 просто не загружается Это сообщение отредактировал(а) ftooper - 17.4.2011, 10:26 |
|||
|
||||
| 504GateWay |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.4.2011 Репутация: нет Всего: нет |
какой путь передается dll1 для загрузки dll2?
Добавлено через 1 минуту и 10 секунд хендл файла получается при вызове CreateFile? |
|||
|
||||
| ftooper |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.4.2011 Репутация: нет Всего: нет |
exe - C:\1.exe
dll1 - C:\dll1.dll dll2 - C:\dll2.dll хендл длл DLLI:=LoadLibrary(name); exe загружает dll2 - длл загружена, Работает! exe загружает dll1, dll1 загружает dll2 - длл НЕ загружена, НЕ работает. |
|||
|
||||
| 504GateWay |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.4.2011 Репутация: нет Всего: нет |
exe загружает dll1, dll1 читает данные из файла dll2 - данные прочитаны?
с помощью CreateFile, ReadFile Это сообщение отредактировал(а) 504GateWay - 17.4.2011, 10:39 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
GetLastError что возвращает?
Уж не в dllmain ли ты загружаешь другую длл? Этого делать нельзя. -------------------- Обижено школьников: 8 |
|||
|
||||
| ftooper |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.4.2011 Репутация: нет Всего: нет |
я не читаю данные другой длл, мне нужно загрузить в длл другую длл, так же как это делает loadlibrary
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Да читаешь или нет это без разницы. все точки входа в длл выстраиваются системой друг за другом (в пределах процесса), поэтому когда одна длл находится в dllmain (в дельфи это основной блок begin-end длл а также все секции инициализации юнитов), не может быть вызвана dllmain другой длл. А значит она не может быть загружена (потому что чтобы LoadLibrary успешно отработала dllmain должна вернуть успех, в дельфи это значение переменной ExitCode)
можно загрузить только as data file, но тогда ты получишь хендл, но вызывать функции из длл не сможешь -------------------- Обижено школьников: 8 |
|||
|
||||
| ftooper |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.4.2011 Репутация: нет Всего: нет |
А как можно реализовать загрузку длл?
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Загружать в подходящем для этого месте. Либо связать с первой длл статически
Это сообщение отредактировал(а) bems - 17.4.2011, 19:46 -------------------- Обижено школьников: 8 |
|||
|
||||
| ftooper |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.4.2011 Репутация: нет Всего: нет |
Расскажите пожалуйста как это реализовать(алгоритм)?
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
импортировать оттуда функцию с помощью ключевого слова external при объявлении функции. Длл будет загружена "одновременно" с твоей
-------------------- Обижено школьников: 8 |
|||
|
||||
| ftooper |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.4.2011 Репутация: нет Всего: нет |
Это понятно
А это не очень... Вторая длл на момент запуска первой может и не существовать, и появится значительно позже первой... например я загружаю первую длл. Через час появляется вторая длл(и первая узнаёт её имя), и первой нужно воспользоваться функциями второй и ещё один момент, в длл2 есть функции которые используют Глобальные переменные этой длл, и есть поток. То есть работает поток, меняет значения переменных, а фукции при вызове получают значения этих переменных, делают некоторые действия с ними, и возвращают результат. Сомневаюсь что external мне поможет... Какие есть ещё варианты? Это сообщение отредактировал(а) ftooper - 17.4.2011, 22:40 |
||||
|
|||||
| northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Вы уже столько напустили туману, что и ответить сложно. Ибо самой задачи вашей мы не знаем. Но например. Почему бы вам не загружать обе dll в саму вашу программу? Они обе загружались бы в АП вашего процесса и можно было бы как-то организовать взаимодействие между ними. Ну и вдобавок. Но строго имхо. Технология DLL разрабатывалась как технология ориентированная на экспорт, а импорт только подразумевался. Статический. Это сообщение отредактировал(а) northener - 18.4.2011, 00:40 -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |