![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование методов из ехе-файла [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-файла нет методов и функция у него одна.