Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

Использование методов из ехе-файла   Найти похожие ветки 

 
Dark Elf ©   (2003-11-05 11:35) [0]

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

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

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


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

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


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

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


 
Digitman ©   (2003-11-05 11:54) [3]


> Dark Elf


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


 
Vorobyev Sergey ©   (2003-11-05 12:11) [4]

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

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


 
Digitman ©   (2003-11-05 12:45) [5]


> вылазили всякие 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, как видишь)


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

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

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

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


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

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


 
Vorobyev Sergey ©   (2003-11-05 13:15) [8]

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


 
Vorobyev Sergey ©   (2003-11-06 07:11) [9]

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


 
Digitman ©   (2003-11-06 08:25) [10]


> Vorobyev Sergey


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


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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
6-25459
stud
2003-11-11 12:29
2004.01.09
вопрос по поводу маршрутизации


14-25612
Doc
2003-12-14 19:52
2004.01.09
Уровень преподователей по информатике


1-25415
Byte
2003-12-24 14:39
2004.01.09
Как обратиться к


3-25187
Вольный Стрелок
2003-12-12 11:16
2004.01.09
работа TQuery.OnUpdateRecord


14-25610
Kerk
2003-12-11 13:59
2004.01.09
checked