Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pointer als übergabeparameter bei Prozedurendeklaration (https://www.delphipraxis.net/18144-pointer-als-uebergabeparameter-bei-prozedurendeklaration.html)

Virchov 15. Mär 2004 14:49


Pointer als übergabeparameter bei Prozedurendeklaration
 
hallo, Herrschaften!

Warum lässt Delphi sowas nicht kompilieren?

procedure CopyBoolArray( ^Source, ^Target: boolean; nElements: integer);

Übrigens, so geht es auch nicht:

procedure CopyBoolArray( Source, Target: ^boolean; nElements: integer);

Was ist falsch mit dieser Deklaration?


Vielen Dank!

Christian Seehase 15. Mär 2004 15:37

Re: Pointer als übergabeparameter bei Prozedurendeklaration
 
Moin Virchov,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Also ich würde es so machen:

Delphi-Quellcode:
type
  PBoolean = ^Boolean;

procedure CopyBoolArray( ApSource, ApTarget: PBoolean; AnElements: integer);

Virchov 15. Mär 2004 15:49

Re: Pointer als übergabeparameter bei Prozedurendeklaration
 
Danke, Chris, scheint jeklappt zu haben!

ps auch herzlichen Dank für den Gruß :-)

Virchow

NicoDE 15. Mär 2004 15:49

Re: Pointer als übergabeparameter bei Prozedurendeklaration
 
Zitat:

Zitat von Virchov
Warum lässt Delphi sowas nicht kompilieren?

Delphi erlaubt keine Inline-Deklarationen von Zeigertypen.
(zudem gibt es keinen Array-Operator wie in C++)

Was Du suchst, könnte so aussehen:
Delphi-Quellcode:
type
  PBooleanArray = ^TBooleanArray;
  TBooleanArray = array [0..High(Integer) - 1] of Boolean;

procedure CopyBoolArray(Source, Target: PBooleanArray; nElements: Integer);

Virchov 15. Mär 2004 15:59

Re: Pointer als übergabeparameter bei Prozedurendeklaration
 
Hallo, Nico!

Genau das mache ich - Übersetzen aus C++ ins Delphi! Und im Urquell (c++) sieht das folgendermaßen aus:

void CopyBoolArray(
bool* Source,
bool* Target,
int nElements
);


Vielleicht, macht es dann überhaupt keinen Sinn, die Zeiger auf Booleans im Delphi zu verwenden (bei Funktionsdeklarationen) ?

Andererseits, soll ich alles möglichst genau übersetzen...

Danke!
Virchov

NicoDE 15. Mär 2004 16:14

Re: Pointer als übergabeparameter bei Prozedurendeklaration
 
Zitat:

Zitat von Virchov
Andererseits, soll ich alles möglichst genau übersetzen...

Wie schon angedeutet, gibt es etliche Möglichkeiten der Übersetzung. Die 'beste' Übersetzung hängt davon ab, in welchem Kontext die Funktion steht bzw am häufigsten verwendet wird.

Die 'wörtliche' Übersetzung hat Christian bereits aufgeführt.
Die Variante mit PBooleanArray würde nur den Umgang auf Seiten von Delphi (mit den Arrays dynamischer Länge) erleichtern.

Zudem kommt es (wenn es um die Kommunikation mit C/C++ geht) darauf an, welche Größe 'bool' hat. Es könnte also mit Boolean (1 Byte) oder LongBool (4 Byte) übersetzt werden!

Virchov 15. Mär 2004 16:58

Re: Pointer als übergabeparameter bei Prozedurendeklaration
 
Klar. Was ich nicht verstehe, warum der Compiler das hier nicht frisst?
Auch keine Möglichkeit der Inline-Deklaration von Arrays in Delphi?

procedure jacobi3x3(a: array [1..3, 1..3] of double; d: array [1..3] of double;
v: array [1..3,1..3] of double]);

Virchov

Christian Seehase 15. Mär 2004 17:00

Re: Pointer als übergabeparameter bei Prozedurendeklaration
 
Moin Virchov,

Zitat:

Zitat von Virchov
Auch keine Möglichkeit der Inline-Deklaration von Arrays in Delphi?

jain. Nicht mit Grössenangabe.

NicoDE 15. Mär 2004 17:17

Re: Pointer als übergabeparameter bei Prozedurendeklaration
 
Könnte so aussehen:
Delphi-Quellcode:
type
  PVector3 = ^TVector3;
  TVector3 = array [1..3] of Double;
  PMatrix33 = ^TMatrix33;
  TMatrix33 = array [1..3] of TVector3;

procedure jacobi3x3(var a: TMatrix33; var d: TVector3; var v: TMatrix33);
Wobei ich bei C++ eher von [0..2] ausgehen würde (type[3] -> array [0..2] of type).


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz