Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Импрот функций из exe. [D6]


Страницы:   1 2 3 4 5 6

Тимохов ©   (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 параметрами.


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо