Форум: "WinAPI";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизИспользование методов из ехе-файла Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c