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

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

Exe как Dll [D7, WinXP]


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

s_ ©   (2007-04-05 09:15:00) 

Каким образом сделать в исполняемом  файле (exe-файле)экспортируемые функции, как в dll. Если можно с примером. Заранее спасибо.


Leonid Troyanovsky   (2007-04-06 22:22:00) [1]


> s_   (05.04.07 16:00) [22]

> Я же задал в полне понятный вопрос, взможно ли исполнять
> импортируемую функцию из exe-шки?

Импортируемую из exe функцию выполнить возможно.
Даже без вторжения в релокацию и даже из чужого exe,
если импортер, например, имеет окно в первичном потоке.
Но, в этом случае, нужна еще специальным образом
изготовленная длл.

--
Regards, LVT.


Сергей М.   (2007-04-06 15:28:00) [2]


> DrPass ©   (06.04.07 15:25) [47]


> Такой фигней заниматься - это только в целях самобразования,
>  и когда до чертиков свободного времени есть


Совершенно верно.


DrPass   (2007-04-06 15:25:00) [3]


> Сергей М. ©   (06.04.07 13:19) [43]


>  устроить принудительную релокацию при наличии RT и принудительную
> инициализацию - дело техники)

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


Сергей М.   (2007-04-06 14:00:00) [4]


> s_   (06.04.07 13:42) [44]


> Как же сделать, чтобы было и с релокацией, и с инициализацией


Так и сделать - реализовать соответствующие алгоритмы.
Предлагаешь бросить все и специально для тебя их реализовать ?)


Сергей М.   (2007-04-06 13:57:00) [5]


> s_   (06.04.07 13:42) [44]


Я ж тебе говорю - тебе это не по силам)

Это ж не "батон на форму кинуть" - алгоритмы нетривиальные, требуют довольно глубоких знаний "поторохов" опер.системы и логики инициализации Делфи-приложений.

Так что, если ты завелся "нипадецки", начни с формулировки вопроса о релокации в форуме "WinAPI".


s_   (2007-04-06 13:42:00) [6]

> Сергей М. ©   (06.04.07 12:59) [42]
Вы же писали, что ВОЗМОЖНО [24]. А теперь вы говорите
>  без релокации и без инициализации подавляющее большинство подобных затей терпят фиаско.
Как же сделать, чтобы было и с релокацией, и с инициализацией.
Или Это все -таки невозможно.
А если невозможно, то чего Вы мне тут голову морочите.
Сказали бы, что для Exe-шки НЕВОЗМОЖНОи точка.


Сергей М.   (2007-04-06 13:19:00) [7]

Я вот тут репу почесал) и, пожалуй, поддержу SergGG ©   (06.04.07 10:00) [36] - было бы желание, а уж устроить принудительную релокацию при наличии RT и принудительную инициализацию - дело техники)


Сергей М.   (2007-04-06 12:59:00) [8]


> Игорь Шевченко ©   (06.04.07 12:48) [41]


> Загрузчик не использует секцию relocation для не-dll


Тоже верно.
Так что главная засада остается главной засадой - без релокации и без инициализации подавляющее большинство подобных затей терпят фиаско.


Игорь Шевченко   (2007-04-06 12:48:00) [9]

Delphi тут не при чем. Загрузчик не использует секцию relocation для не-dll.

Сергей, ты об этом тоже знаешь :)


Сергей М.   (2007-04-06 11:02:00) [10]


> DrPass ©   (06.04.07 10:44) [38]


Да, действительно, я был не прав - в D7 флаг IMAGE_FILE_RELOCS_STRIPPED по умолчанию не установлен, и соответственно RT по умолчанию генерируется.


Сергей М.   (2007-04-06 10:54:00) [11]


> DrPass ©   (06.04.07 10:44) [38]
>
>


> Как раз он таки всегда ее генерирует.


Да что ты говоришь !?) А мужики-то и не знают))..

То-то я смотрю - по какому ImageBase ни загружай собранный в D7 exe-модуль, абсолютные адреса, сгенерированные линкером, всегда будут корректными))


DrPass   (2007-04-06 10:44:00) [12]


> Сергей М. ©   (06.04.07 10:10) [37]


> Нельзя, к примеру, заставить дельфийский линкер генерировать
> таблицу релокаций для ехе-модулей

Как раз он таки всегда ее генерирует. Только в последних версиях BDS есть опция SETPEOPTFLAGS, с помощью которой можно запретить генерировать таблицу релокаций в исполняемом файле


Сергей М.   (2007-04-06 10:10:00) [13]


> SergGG ©   (06.04.07 10:00) [36]


Все да не всё)

Нельзя, к примеру, заставить дельфийский линкер генерировать таблицу релокаций для ехе-модулей.


SergGG   (2007-04-06 10:00:00) [14]

По-моему в Delphi можно сделать всё!!!!
Главное - иметь желание.


Суслик   (2007-04-06 09:16:00) [15]

я помню интересовался этим вопросом года 2-3 назад. по результатам обсуждения Игорь Шевченко вынес вердикт - в дельфи этого сделать нельзя.


Германн   (2007-04-05 23:46:00) [16]


> Leonid Troyanovsky ©   (05.04.07 23:01) [33]
>
...
>
> 2All: Хочется повториться: длл - это рудиментарная форма
> технологии клиент-сервер в условиях дефицита ресурсов.
>
> Не мучайте старушку, в конце-концов.
>
> --
> Regards, LVT.
>

Точно. Долой kernel32.dll и все другие! Даёшь дополнительные сотни метров свободного пространства в System32!
:)


Leonid Troyanovsky   (2007-04-05 23:01:00) [17]


> Loginov Dmitry ©   (05.04.07 20:51) [32]

> качестве параметра адреса функции, находящейся в EXE (с
> точки зрения DLL такие функции являются

У длл не должно быть своей точки зрения, бо в чужой
монастырь со своим уставом не лезут.

2All: Хочется повториться: длл - это рудиментарная форма
технологии клиент-сервер в условиях дефицита ресурсов.

Не мучайте старушку, в конце-концов.

--
Regards, LVT.


Loginov Dmitry   (2007-04-05 20:51:00) [18]

В любом случае экспорт функций в ЕХЕшнике - это извращение. При работе DLL и EXE в одном адресном пространстве наиболее распространенный вариант использования функций EXE из DLL - это вызов экспортируемой функции из DLL с передачей в качестве параметра адреса функции, находящейся в EXE (с точки зрения DLL такие функции являются callback-функциями)


Loginov Dmitry   (2007-04-05 20:46:00) [19]

> Каким образом сделать в исполняемом  файле (exe-файле)экспортируемые
> функции, как в dll. Если можно с примером. Заранее спасибо.


Точно также, как и при экспорте из DLL. В случае, если если библиотека загружена в адресное пространство того самого ЕХЕшника, то не нужно беспокоится о инициализации объектов и т.п. Раз ЕХЕ запущен, значит все данные инициализированы. Но совсем другое дело, если требуемые функции экспортируются каким-либо сторонним ЕХЕ. В таком случае используй СОМ.


Leonid Troyanovsky   (2007-04-05 20:01:00) [20]


> s_   (05.04.07 16:27) [25]

> для чего сделали возможным ЭКСПОРТИРОВАТЬ функции в исполняемом
> (exe) файле????? :((((

Например, чтобы загруженная им библиотека, могла получить
доступ к этим функциям через GetProcAddress.
Только не спрашивай, зачем это надо.

--
Regards, LVT.


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

Наверх

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