![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Импрот функций из exe. [D6]
Тимохов © (2004-06-29 11:44:00)Прочел тут как-то, что импортировать функции можно не только из dll, но и из других exe. Попробовал сделать динамической загрузкой, получилось :)) Я сделал один dpr, даже без begin и end, т.е. одна функция и секция exports.
Вопросы:
1. Что происходит при загрузке exe череp LoadLibrary? Для dll, если не ошибаюсь вызывается стартовая функция библиотеки с соответствующим флагом, что-то типа dllproc process_attach (на память не помню). Что вызывается для exe? У него вроде нет такой функции.
2. Почему у меня не сработал такой код в библиотеке
procedure f();
begin
MessageBox(0, 'text', 'caption', MB_OK);
end;
При вызове f из другого приложения впесто текстов получается ерунда (т.е. случайная область памяти).
И совершенно нормально сработал такой
procedure f();
var
kText: packed array[0..4] of char;
kCaption: packed array[0..7] of char;
begin
kText[0] := 't';
kText[1] := 't';
kText[2] := 't';
kText[3] := 't';
kText[4] := #0;
kCaption[0] := 'c';
kCaption[1] := 'a';
kCaption[2] := 'p';
kCaption[3] := 't';
kCaption[4] := 'i';
kCaption[5] := 'o';
kCaption[6] := 't';
kCaption[7] := #0;
MessageBox(0, @kText, @kCaption, MB_OK);
end;
В последнем случае все вывелось корректно.
Piter (2004-07-02 21:37:00) [41]ну и как там что?
Игорь Шевченко (2004-07-01 00:50:00) [42]Тимохов © (30.06.04 18:00)
> Скажите нужно или мне в комментирии к каждой выписывать
> асм код, который у меня получается или нет?
Я думаю, не стоит. Мне главное, чтобы его можно было быстро и ничего не настраивая, собрать и запустить.
Тимохов (2004-06-30 18:00:00) [43]
> Игорь Шевченко © (30.06.04 12:28) [64]
Вопрос-уточнение про формат примера, который я хочу Вам предоставить.
Скажите нужно или мне в комментирии к каждой выписывать асм код, который у меня получается или нет?
Тимохов (2004-06-30 15:13:00) [44]Удалено модератором
Примечание: Offtopic
Тимохов (2004-06-30 15:12:00) [45]Удалено модератором
Примечание: Offtopic
Piter (2004-06-30 15:05:00) [46]Я тоже очень заинтересовался фактом, "открытым" Тимоховым. Очень хотел бы знать его объяснение
Тимохов (2004-06-30 12:31:00) [47]
> Игорь Шевченко © (30.06.04 12:28) [64]
Отличное предложение.
Завтра составлю и пришлю пример с документацией, о том, что не не понятно и что понятно. А также вопросы.
Спасибо.
:)
Игорь Шевченко (2004-06-30 12:28:00) [48]Тимохов © (30.06.04 12:24)
Есть встречное предложение: Ты собираешь ма-аленький неработающий пример, со всеми EXE, PAS'ами, DPR'ами и прочими нужными файлами, посылаешь мне на почту. Я не гарантирую, что посмотрю быстро, но специально для этого мне разрабатывать проект некогда. Результаты своих наблюдений я сообщу в форум.
Тимохов (2004-06-30 12:24:00) [49]Попытаюсь объяснить, зачем это нужно.
Вопрос возник просто как теоретический. Но сейчас в том, чтобы делать export функции в своей программе я вижу практические выгоды. Не буду говорить какие, т.к. ногами затоптать могут (скажут пользуйся com и не умничай :))).
Поэтому вопрос из чистого любопытсва для меня перешел в разряд важных с практической точки зрения.
Тимохов (2004-06-30 12:21:00) [50]
> Игорь Шевченко © (30.06.04 12:17) [61]
Спасибо, что принмаете участие в этом обсуждении.
Про fixup у exe я понял - посмотрю внимательнее.
Но как относиться к тому, что у dll в нее внесены константные строки, а в exe - нет. Я же не делал никаких действий ни в том ни в другом случае. Это на компилятор дельфи директивы labrary и program так действуют?
Т.е. никто не говорит о том, где свзять описание формата данных, выдаваемых tdump, то я прихожу к выводу, что такого формата нет, а для того, чтобы понимать, что там написано, нужно просто хорошо знать структуру исполняемых модулей, например, изучив msdn и другие источники. Так?
Игорь Шевченко (2004-06-30 12:17:00) [51]Тимохов © (30.06.04 11:46)
> Силился понять, как этот ответ (выше) отностися к этому
> вопросу (ниже) :))
Ответ относится так, что у EXE есть таблица Fixup(Relocations), как и у DLL
Тимохов (2004-06-30 11:58:00) [52]
> SammIk © (30.06.04 11:43) [57]
Наверное, можно и ручками (не знаю).
Но ведь и компилятор должен предоставлять такой сервис?
Для dll он же это радостно делает. Почему не хочет для exe?
Посмотрел вчера директивы компилятора: знаний не хватает, чтобы понять есть ли такая директива. Есть там, что-то по управлению PE флагами.
Тимохов (2004-06-30 11:46:00) [53]
> Игорь Шевченко © (30.06.04 11:39) [54]
> Почему не пользоваться TDUMP прежде чем задавать подобные
> вопросы? Практика - критерий истины.
Силился понять, как этот ответ (выше) отностися к этому вопросу (ниже) :))
> > 1. Почему в dll создается таблица релокации, а в exe нет?
tdump я полльзовался. О чем я выше и сказал. А также спросил про формат данных, которые tdump выдает. Он описан где нибудь?
Все же - один и тот же код в dll делает перемещаемым, в exe - нет. Можно ли в дельфи управлять перемещаемостью кода? НАсколько я понимаю в dll это делается само, в exe - нет.
SammIk (2004-06-30 11:45:00) [54]Удалено модератором
Примечание: Offtopic
SammIk (2004-06-30 11:43:00) [55]Тогда все понятно, просто выш светло голубои
(c)с понтолыку иногда сбивает.
Малоли что, вдруг что-то не допонимаю.
SammIk (2004-06-30 11:43:00) [56]Кстати, да простят знающие, можно ручками создать
таблицу релоков.
Digitman (2004-06-30 11:40:00) [57]
> SammIk © (30.06.04 11:28) [53]
все верно понимаешь.. но что тебе из всего этого остается неясным ?
Игорь Шевченко (2004-06-30 11:39:00) [58]Тимохов © (30.06.04 11:11)
> 1. Почему в dll создается таблица релокации, а в exe нет?
Почему не пользоваться TDUMP прежде чем задавать подобные вопросы? Практика - критерий истины.
SammIk (2004-06-30 11:28:00) [59]Насколько я понял из сдк, то это принятое название.
И кличат им точку входа(entrypoint), или я чегото не допонимаю?
Если так, то поясните пожалуисто.
SammIk (2004-06-30 11:22:00) [60]2[49]
Насколько я понимаю, приходит всетоки сообщение
PROCESS_ATTACH.
Вернее даже не сообщение, просто по энтрипоинт передается управление, с 3 параметрами.