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

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

Передача и вызов процедуры/функции. [D7, Win2k, WinXP]


Страницы:   1 2

Nick Denry ©   (2005-09-21 17:05:00) 

Есть такая проблема: моей программе  передают указатель на процедуру или функцию (из другой программы) и как эту самую функцию, по этому указателю вызвать (своего рода callback).

т.е. надо что-то типа call из asm или можно как-то по-другому?


Zeqfreed   (2005-09-21 20:23:00) [21]

Nick Denry ©   (21.09.05 20:11) [4]
Ну тебе уже ответили в [2], что нужно описать прототип ф-ции.

Например:
type
TFooProc = function(arg1, arg2 : TSomeType) : TSomeOtherType;


Там где надо вызывать ф-цию:
procedure CallFooProc(proc : TFooProc);
begin
proc(arg1, arg2);
end;


Ну и, соответственно, в основном модуле:
function FooProc(arg1, arg2 : TSomeType) : TSomeOtherType;
begin
//place your code here ;)
end;
...
CallFooProc(FooProc);


Код не проверял, но все должно быть примерно так :)


Nick Denry   (2005-09-21 20:11:00) [22]

Извиняюсь за изначально криво поставленный вопрос, ибо что указатель на функцию из другого процесса недействителен в твоем процессемне известно, а так, как вопрос поставил то сам себе бы по ушам надавал..


Nick Denry   (2005-09-21 20:08:00) [23]

Если программы - это модули или DLL в одном процессе - то проблем нет.

Именно так. Т.е. один из них - мой экзешник (- он передает указатель), а библиотека, должна вызвать эту функцию (библиотека - это глобальный контрол, как Мйкрософтовские кнопки (класс 'BUTTON'), например).

Можно даже на asm не уходить

Вот это меня интересовало. И еще интересует, обязан ли я указывать формат вызова (например stdcall) или нет?


ANB   (2005-09-21 17:14:00) [24]

Точнее : указатель на функцию из другого процесса недействителен в твоем процессе. Если программы - это модули или DLL в одном процессе - то проблем нет. Можно даже на asm не уходить - описываешь указатель на функцию (нужен прототип) и вызываешь. Если процессы разные - то дело намного серьезнее, придется писать DLL и осуществлять внедрение в AP чужого процесса. А уже во внедренном коде производить вызов коллбэка.


begin...end   (2005-09-21 17:08:00) [25]

Указатель на функцию некоторой программы будет недействителен в другой программе.


Страницы:   1 2

Наверх

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