Rocksolid Light

groups  faq  privacy  How to post  login

Message-ID:  

You're not my type. For that matter, you're not even my species!!!


rocksolid / de.comp.lang.delphi.misc / Free Pascal / Zeiger auf Funktion?

SubjectAuthor
* Free Pascal / Zeiger auf Funktion?Frank Graf
`- Re: Free Pascal / Zeiger auf Funktion?Sieghard Schicktanz

1
Subject: Free Pascal / Zeiger auf Funktion?
From: Frank Graf
Newsgroups: de.comp.lang.delphi.misc
Organization: A noiseless patient Spider
Date: Tue, 14 May 2024 16:00 UTC
Path: i2pn2.org!rocksolid2!news.neodome.net!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: fgr...@duck.com (Frank Graf)
Newsgroups: de.comp.lang.delphi.misc
Subject: Free Pascal / Zeiger auf Funktion?
Date: Tue, 14 May 2024 18:00:50 +0200
Organization: A noiseless patient Spider
Lines: 56
Archive: no
Message-ID: <v201rk$8l3k$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1; format=fixed
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 14 May 2024 18:00:52 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="b2b7ea67cd1c3cc2f37a24569160f98e";
logging-data="283764"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+qjrE0VHyPc8PSGCO7LoZ9"
User-Agent: flnews/1.2.0 (for GNU/Linux)
Cancel-Lock: sha1:j4tSzoSuGFxpfzLJVJJTonMszz8=
X-No-Archive: yes
View all headers

Hallo,

ich habe von dieser Seite:

https://www.freepascal.org/docs-html/ref/refse82.html

folgenden Quelltext kopiert und versucht zu compilieren:

{ Start }

Type
FuncType = Function: Integer;

Var A : Integer;

Function AddOne : Integer;

begin
A := A+1;
AddOne := A;
end;

Var F : FuncType;
N : Integer;

begin
A := 0;
F := AddOne; { Assign AddOne to F, Don't call AddOne}
N := AddOne; { N := 1 !!}
end.

{ Ende }

Das funktioniert nur wenn ich "fpc -Mdelphi <source.pas>" aufrufe.

Im fpc Modues erhalte ich folgenden Fehler:

Error: Incompatible types: got "SmallInt" expected "<procedure variable type of function:SmallInt;Register>"

Ich experimentiere bloß rum. Ich möchte einer Funktion eine andere Funktion
als Parameter übergeben damit sie dort aufgerufen wird. Ich dachte vielleicht
kann ich einen Zeiger oder eine Referenz auf eine Funktion erstellen und
diese dann übergeben. Im Delphi Modus funktioniert das obige Beispiel.

Wie kann ich das im fpc Modus erreichen?

Gibt es eine Möglichkeit mit der Funktion Addr()?

https://wiki.freepascal.org/Addr

pointer := Addr(<Funktionsname>);

Dann habe ich aber nur einen "generischen" Pointer auf die Funktion.

Frank

Subject: Re: Free Pascal / Zeiger auf Funktion?
From: Sieghard Schicktanz
Newsgroups: de.comp.lang.delphi.misc
Organization: Dr. Sieghard Schicktanz
Date: Tue, 14 May 2024 17:49 UTC
References: 1
Path: i2pn2.org!i2pn.org!news.swapon.de!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!Achmuehle.WOR
From: Sieghard...@SchS.de (Sieghard Schicktanz)
Newsgroups: de.comp.lang.delphi.misc
Subject: Re: Free Pascal / Zeiger auf Funktion?
Date: Tue, 14 May 2024 19:49:35 +0200
Organization: Dr. Sieghard Schicktanz
Message-ID: <20240514194935.2d2bf8b4@Achmuehle.WOR>
References: <v201rk$8l3k$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Injection-Info: solani.org;
logging-data="321293"; mail-complaints-to="abuse@news.solani.org"
Cancel-Lock: sha1:v6XR/hsjuf+Fe3OZ2StmVMlZY+A=
X-User-ID: eJwVx0cRwDAMADBK3gOOV/hD6FU/KRvauJia6NPXQpe1Ze3jpJj7YKsb2NhI6VSoANoZAihRuAbvT0fFBsI5zx5hBInnB8HnGOQ=
X-Newsreader: Claws Mail 4.1.1 (GTK 3.24.41; x86_64-slackware-linux-gnu)
View all headers

Hallo Frank,

Du schriebst am Tue, 14 May 2024 18:00:50 +0200:

> Hallo,
>
> ich habe von dieser Seite:
....
> folgenden Quelltext kopiert und versucht zu compilieren:
>
> { Start }
>
> Type
> FuncType = Function: Integer;
....
> Var F : FuncType;
....
> F := AddOne; { Assign AddOne to F, Don't call AddOne}
....
> Das funktioniert nur wenn ich "fpc -Mdelphi <source.pas>" aufrufe.
> Im fpc Modues erhalte ich folgenden Fehler:
....

Ja. Gemäß Dokumentation möchte der "fpc"-Modus vom Programmierer angegeben
wissen, ob eine Funktionsangabe (die ja z.B. auch eine Prozedur-Referenz
zurpckgeben könnte) als _Aufruf_ oder als _Referenz_ abzusehen wäre. In
Deinem Fall willst Du eine _Referenz_ zuweisen, und das ist im fpc-Modus
mit einem vorangestellten "@" anzuzeigen.

> Ich experimentiere bloß rum. ...

Dokumentation anschauen und nach Erklärungen suchen wäre nützlich(er).

> Ich experimentiere bloß rum. Ich möchte einer Funktion eine andere
> Funktion als Parameter übergeben damit sie dort aufgerufen wird. Ich

Ja, dafür funktioniert das genauso.

> dachte vielleicht kann ich einen Zeiger oder eine Referenz auf eine
> Funktion erstellen und diese dann übergeben. Im Delphi Modus funktioniert
> das obige Beispiel.

Sicher, das geht auch und kann in manchen Fällen sogar nützlich oder nötig
sein. Es kommt halt darauf an, wofür so ein Konstrukt dienen soll.

> Wie kann ich das im fpc Modus erreichen?

S.o.

> Gibt es eine Möglichkeit mit der Funktion Addr()?

Ja, das sollte genaiso gehen, ist aber (inzwischen?) eher unüblich, der
"@"-Operatir macht dasselbe.
>
> pointer := Addr(<Funktionsname>);
>
> Dann habe ich aber nur einen "generischen" Pointer auf die Funktion.

Dann ja, wenn die Zuweisung auf eine generische Pointer-Variable erfolgt.
Aber auch Pointer können in Pascal einen Typ haben.

--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------


rocksolid / de.comp.lang.delphi.misc / Free Pascal / Zeiger auf Funktion?

1
server_pubkey.txt

rocksolid light 0.9.136
clearnet tor