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