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

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

Точка входа в функцию [D5]


MVova ©   (2002-04-15 13:57:00) 

Всем привет.
Есть функция:
function KK : Boolean;
begin
Result := True;
end;

есть другая ф-я:
function AA(K : Pointer) : Boolean;
begin
Result := K //?????
end;

далее
AA(@KK);

Ворос: как в AA имея точку входа KK выполнить KK и получить результат???


Alx2   (2002-04-15 14:56:00) [1]

Pointer - 4 байта.
AAA - 8 байт.


MVova   (2002-04-15 14:44:00) [2]

работает если procedure TForm1.KK(KKK: AAA);
а так procedure TForm1.KK(KKK: Pointer);
кричит
if AAA(KKK) then - Invalid typecast


Alx2   (2002-04-15 14:29:00) [3]

В описании функционального типа добавить "of object"


MVova   (2002-04-15 14:23:00) [4]

Спасибо с эти мразобрался, но почему не работает такой код :-(
На форме 2 кнопки и одна лейба. (лейба так для видимости работы)

в GetK входит но приэтом Self = nil ???

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
AAA = function : Boolean;

TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
K : Boolean;
procedure KK(KKK : Pointer);
function GetK : Boolean;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
K := not K;
if K then
Button1.Caption := "True"
else
Button1.Caption := "False";
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
KK(@TForm1.GetK);
end;

function TForm1.GetK: Boolean;
begin
Result := K;
end;

procedure TForm1.KK(KKK: Pointer);
var
I : Integer;
begin
I := 0;
repeat
Inc(i);
Label1.Caption := IntToStr(i);
Application.ProcessMessages;
if AAA(KKK) then
Button2.Caption := "True"
else
Button2.Caption := "False"
until False;
end;

end.


Alx2   (2002-04-15 14:07:00) [5]

Опять синхронизм, блин...
В следующий раз 10 мин. выжидать буду :)


Alx2   (2002-04-15 14:05:00) [6]

Type TMyFunc : function:boolean;

function AA(Func : TMyFunc):Boolean;
Begin
Result := Func;
End;


MBo   (2002-04-15 14:03:00) [7]

точка входа- очевидно адрес, указатель.
тогда
type boolfunc=function:boolean;

boolvar:=boolfunc(kkaddress);


Наверх

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