Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eine"array of set of Byte" an eine andere Form übergeben? (https://www.delphipraxis.net/74161-eine-array-set-byte-eine-andere-form-uebergeben.html)

Hallo_Thomas 29. Jul 2006 12:34


Eine"array of set of Byte" an eine andere Form übe
 
Hallo,

wie übergebe ich eine array of set of Byte an eine andere Form(Klasse)?

Delphi-Quellcode:
type
  TSetOfByte = array of set of Byte;

procedure TForm2.Button2Click(Sender: TObject);
var Werte:TSetOfByte;
begin
  SetLength(Werte,5);
  Form1.SetLaenge(Werte,Werte);
  Label1.Caption:=IntToStr(length(Werte));
end;

procedure TForm1.SetLaenge(Wert:TSetOfByte;var Werte:TSetOfByte);
begin
  SetLength(Werte,10);
end;
[Fehler] E2010 Inkompatible Typen: 'Unit1.TSetOfByte' und 'unit2.TSetOfByte'

xaromz 29. Jul 2006 12:37

Re: Eine"array of set of Byte" an eine andere Form
 
Hallo,

Du darfst Deinen Typen nur einmal deklarieren. Offensichtlich deklarierst Du ihn aber in jeder Unit erneut. Damit sind die beiden Typen, trotz gleicher Deklaration, für den Compiler unterschiedlich.

Gruß
xaromz

Hallo_Thomas 29. Jul 2006 12:45

Re: Eine"array of set of Byte" an eine andere Form
 
Jo, wie deklariere ich in 2 forms den typen nur einmal?

xaromz 29. Jul 2006 12:47

Re: Eine"array of set of Byte" an eine andere Form
 
Hallo,
Zitat:

Zitat von Hallo_Thomas
Jo, wie deklariere ich in 2 forms den typen nur einmal?

Am Besten deklarierst Du den Typen in einer eigenen Unit und bindest diese in beiden Units ein.

Gruß
xaromz

Hallo_Thomas 29. Jul 2006 12:54

Re: Eine"array of set of Byte" an eine andere Form
 
Jo, danke, klappt erst mah bestens!!!!!!!!!!

3_of_8 29. Jul 2006 13:16

Re: Eine"array of set of Byte" an eine andere Form
 
Wieso sind die eigentlich unterschiedlich? TSetOfByte ist doch nur ein Alias.

Daher müsste das doch eigentlich möglich sein. :gruebel:

Christian Seehase 29. Jul 2006 13:24

Re: Eine"array of set of Byte" an eine andere Form
 
Moin Manuel,

wenn sie in unterschiedlichen Units deklariert sind, sind sie für den Compiler unterschiedlich.

3_of_8 29. Jul 2006 13:54

Re: Eine"array of set of Byte" an eine andere Form
 
Obwohl sie nur Aliases sind? Ich meine, sie besitzen ja nicht mal eine eigene RTTI.

Der_Unwissende 29. Jul 2006 14:03

Re: Eine"array of set of Byte" an eine andere Form
 
Hi,
es sind zwar nur Aliase, aber sie gelten ja in der gesamten Unit. Würdest du nun das Alias an einer Stelle ändern, z.B. weil du jetzt ein Array of set of Integer hast, dann hast du halt ein paar Probleme.
Klar, normalerweise könnte jetzt wieder der Compiler erkennen das die Aliase nun unterschiedliche Datentypen behandeln, aber Delphi kann das schon mal nicht. Nein, es könnte (da müsste man jetzt aber eher einen Fall konstruieren) dazu kommen, dass du einen theoretisch noch kompatiblen Typ auf der anderen Seite hast und es dann zu Problemen kommt die du nicht so leicht findest. Es ist einfach sauberer, wenn du diese Trennung vornimmst (obwohl ich persönlich mir auch schon häufiger gewünscht habe, dass Delphi da mal etwas flexibler wird).

Gruß Der Unwissende

jbg 29. Jul 2006 14:03

Re: Eine"array of set of Byte" an eine andere Form
 
Zitat:

Zitat von 3_of_8
Obwohl sie nur Aliases sind? Ich meine, sie besitzen ja nicht mal eine eigene RTTI.

Was hat die RTTI damit zu tun? Mit der bekommst du nur den Aufbau zurück. Liefert denn TypeInfo(TSetOfByte) von der einen Unit und der der anderen Unit etwa den selben Zeiger zurück?

Aliase definierst du nur, wenn du bereits einen Namen für einen Typen hast. Ein direkt deklariertes Array oder Record werden niemals Aliase, auch wenn du Haar genau das selbe Array oder den selben Record definierst. Das ist eben eie Vorgabe des PASCAL Standards, welchen Delphi in diesem Fall einhält.
Delphi-Quellcode:
type
  TTestRec_1 = array[0..10] of Integer;
  TTestRec_2 = array[0..10] of Integer;

  TTest_1 = TTestRec_1;
  TTest_2 = TTestRec_1;
TTestRec_1 und TTestRec_2 sind zwei verschiedene Typen. TTest_1 und TTest_2 hingegen Aliase für TTestRec_1.

himitsu 29. Jul 2006 14:04

Re: Eine"array of set of Byte" an eine andere Form
 
Sie sind zwar gleich aufgebaut, haben aber eigene Definitionen.

Und es wird halt nicht der Aufbau, sondern die Definition verglichen.

selbst in einer Unit (nicht nur in unterschiedlichen) sind TSetOfByte und Txyz unterschiedlich.
Delphi-Quellcode:
type
  TSetOfByte = array of set of Byte;
  Txyz = array of set of Byte;
so wären sie gleich
Delphi-Quellcode:
type
  TSetOfByte, Txyz = array of set of Byte;

// oder
type
  TSetOfByte = array of set of Byte;
  Txyz = TSetOfByte;
PS: so wären sie wieder nicht gleich :stupid:
Delphi-Quellcode:
type
  TSetOfByte = array of set of Byte;
  Txyz = type TSetOfByte;

@Hallo_Thomas:
du mußt deinen Typ natürlich nicht unbedingt in einer eigenen Unit definieren.
Da du eh mindestens eine der Units in der anderen eingebunden hast, würde es reichen, wenn du den Typ unter Interface in der Eingebundenen definierst, dann ist der in der anderen Unit auch vorhanden :)


@3_of_8:
wenn der Aufbau verglichen würde, dann wären z.B. diese Typen auch gleich :zwinker:
Delphi-Quellcode:
type
  TPoint = record
    x, y: integer;
  end;
  TIrgendwas = record
    alpha: integer;
    beta: integer;
  end;
  TNochwas = array[0..1] of integer;
(es sind ja jeweils 2 hintereinanderliegende Integer :roll: )

Der_Unwissende 29. Jul 2006 14:09

Re: Eine"array of set of Byte" an eine andere Form
 
Zitat:

Zitat von himitsu
... würde es reichen, wenn du den Typ unter implementation in der Eingebundenen definierst, dann ist der in der anderen Unit auch vorhanden :)

Meinst du nicht eher den Interface Teil?

himitsu 29. Jul 2006 14:11

Re: Eine"array of set of Byte" an eine andere Form
 
ups, jo meinte ich :wall:

hab doch nur seit heut morgen mein Delphi nicht gesehn, da kann man schon mal einiges vergessen :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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