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

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

Использование методов из ехе-файла [D7, Win95/98, WinME, WinXP]


Dark Elf ©   (2003-11-05 11:35:00) 

Уважаемые мастера!

Как использовать методы и функции какого-либо ехе-файла?

Заранее благодарен за ответ.


Vorobyev Sergey   (2003-11-06 08:43:00) [1]


> что значит "попробуйте" ? я тебе уже сказал - при таком
> спопобе доступа штатная инициализация объекта Application
> не выполняется, ибо точка входа в главную ф-цию приложения
> не вызывается. Хочешь пользовать все преимущества VCL в
> этом случае ? Инициализируй нужные объекты явно.

Полностью согласен, поэтому-то и говорю, что не так все просто, как при использовании DLL.. А инициализировать нужные объекты VCL явно, я думаю, не так то и просто. Как же все учесть, что Borland-цы заложили?

>Digitman
Не обижайся :)


Digitman   (2003-11-06 08:25:00) [2]


> Vorobyev Sergey


что значит "попробуйте" ? я тебе уже сказал - при таком спопобе доступа штатная инициализация объекта Application не выполняется, ибо точка входа в главную ф-цию приложения не вызывается. Хочешь пользовать все преимущества VCL в этом случае ? Инициализируй нужные объекты явно.


Vorobyev Sergey   (2003-11-06 07:11:00) [3]

Что? Задумались?


Vorobyev Sergey   (2003-11-05 13:15:00) [4]

>[5] Digitman © (05.11.03 12:45)
В этом-то примере AV нет, но попробуйте просто в процедуре XXX вместо Exit поставить ShowMessage("test") - и ВСЕ, уже не работает..
А более сложный код (с объектами, передачей параметров, хотя бы не string) ? Просто вот так не выходит, значит есть какие-то нюансы, поэтому-то и не разбирался..


y-soft   (2003-11-05 13:00:00) [5]

Еще один хороший путь - встроить COM-сервер и работать с методами его интерфейсов


y-soft   (2003-11-05 12:47:00) [6]

>Vorobyev Sergey © (05.11.03 12:11) [4]

Прекрасно экспортируется. И при статической, и при динамической загрузке. И из других приложений и из самой программы.

Объявляете наверное как-то не так. Или передаете длинные строки без использования ShareMem...


Digitman   (2003-11-05 12:45:00) [7]


> вылазили всякие AV, долго не разбирался


ну и плохо что не разбирался

проблема-то не в вызове как таковом, а в инициализации вызываемого модуля, которая не происходит штатным образом (т.е. так как если бы вызываемый EXE был стартован обычным образом)

в подробности вдаваться не буду - это долго

вот простейший работающий пример :

вызывающий код :

type
tx = procedure;
var
hLib: THandle;
xxx: tx;

...

hLib := LoadLibrary("Project.exe");
xxx := GetProcAddress(hLib, "XXX");
xxx;

вызываемый код :
(в проекте Project.Exe (или в любом из его модулей)):
...
interface

procedure XXX;

exports XXX;

implementation

procedure XXX;
begin
Exit;
end;

всех делов) ... и никаких AV, как видишь)


Vorobyev Sergey   (2003-11-05 12:11:00) [8]

>Diditman
А у меня почему-то не получилось..
прописывал в Delphi процедуры в секции exports. Компилилось нормально.
Но из другой программы по аналогии с DLL вызвать не получилось, ни статической, ни динамической загрузкой.. вылазили всякие AV, долго не разбирался, решил задачу по-другому

>Digitman
Сам пробовал? Или только теоретически предполагаешь?
Если получалось, то посоветуй как - для меня это решило бы многие проблемы


Digitman   (2003-11-05 11:54:00) [9]


> Dark Elf


можно, если EXE-модуль предусматривает экспортируемые точки входа
т.е. прямая аналогия с DLL


Рамиль   (2003-11-05 11:51:00) [10]

Никак, можно только из DLL.


Плохиш_   (2003-11-05 11:42:00) [11]

У exe-файла нет методов и функция у него одна.


Наверх

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