Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.012 c
14-25543
dDan
2003-12-18 16:17
2004.01.09
Пара простеньких вопросов


1-25382
Dysan
2003-12-24 15:00
2004.01.09
ctrl+shift+f10


1-25396
Checist [root]
2003-12-24 18:56
2004.01.09
Тип TFramesObject


14-25602
antonyan
2003-12-17 13:05
2004.01.09
Нужен русский help


14-25517
Jih
2003-12-16 00:15
2004.01.09
Нужна база на interbase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский