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

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

Как передать функцию класса как callback функцию или [D6]


IDL ©   (2002-04-26 16:42:00) 

Здравствуйте.
Мне в программе надо, чтобы DLL могла добавлять ListItem"ы в листбокс этого окна. Предполагалось сделать это так

procedure TForm1.Clear;
begin
ListBox1.Clear;
end;

type
TFunc : procedure;

function inDLL(func: TFunc):Boolean; // эта функция из DLL


и потом в inDLL передать @Clear данной формы, но оказалось, что это невозможно :( Может подскажете, как все-же реализовать подобное??


IDL   (2002-04-26 17:32:00) [1]

Про TMethod ничего не понял :), но все равно спасибо.
Сделаю так, как посоветовал Виктор Щербаков


Виктор Щербаков   (2002-04-26 17:27:00) [2]

var TProc = procedure(Form: TObject);

function inDLL(Proc: TProc; Form: TObject): Boolean;

procedure Clear(Form: TObject);
begin
if Assigned(Form) then
(Form as TForm1).ListBox1.Clear;
end;

А в dll:
function inDLL(Proc: TProc; Form: TObject): Boolean;
begin
...
Proc(Form);
...
end;

И не надо передавать методы.


MBo   (2002-04-26 17:16:00) [3]

а может, сделать отдельную процедуру, не метод form1 и не мучиться?
из нее вызывать
form1.clear;


Виктор Щербаков   (2002-04-26 17:14:00) [4]


> Неа, не будет работать - Parametr list differ

Нужно изменить объявление импортируемой из dll функции.
Там ведь в параметрах должна быть не просто процедура, а метод.


MBo   (2002-04-26 17:14:00) [5]

то, что Виктор предложил, проходит?

Data- адрес экземпляра объекта (TForm1)
а Code - адрес функции, обший для всех объектов данного типа, т.е. для класса как такового.


Виктор Щербаков   (2002-04-26 17:12:00) [6]


> Тогда что такое Code и Data ? И как это применить к моей
> проблеме?

Code - указатель на код метода.
Data - указатель на объект, для которого метод вызывается.


IDL   (2002-04-26 17:11:00) [7]

Виктор Щербаков
Неа, не будет работать - Parametr list differ


IDL   (2002-04-26 17:09:00) [8]

MBo
А можно чуть поподробнее? Я об этом первый раз услышал 8-( а в хелпе всего 3 строчки.

Мой Clear : TMethod ??
Тогда что такое Code и Data ? И как это применить к моей проблеме?


Виктор Щербаков   (2002-04-26 17:05:00) [9]

f := Clear;


MBo   (2002-04-26 16:59:00) [10]

метод объекта состоит из двух указателей - Data и Сode
см. TMethod


IDL   (2002-04-26 16:55:00) [11]

type
TR = procedure of object;

var
f : TR;
begin
f:=@Clear;
или inDll(@clear)
---------------
Error - variable required


Виктор Щербаков   (2002-04-26 16:46:00) [12]

TFunc : procedure of object;


Наверх

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