Autor Beitrag
Smithers
Hält's aus hier
Beiträge: 5


D5 Prof
BeitragVerfasst: Di 19.08.03 14:10 
Hallo,

ich möchte aus einem Hauptprogramm einer Prozedur/Funktion, die sich in einer extra Unit befindet, ein zweidimensionales dynamisches Array zum Bearbeiten übergeben. Habe mit 1000 Varianten nur Fehlermeldungen produziert...

Wie kann ich das Problem lösen (zB einen Typ aus dem aufrufenden Programm der Unit zur Verfügung stellen, zweidimensionales Array in Prozeduraufruf einbinden...)?

Liebe Grüße,

Smithers
derDoc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: Di 19.08.03 14:20 
Wie übergibst du dein Array denn der Prozedur?

Ein wenig Quellcode wäre hilfreich.

_________________
MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
Smithers Threadstarter
Hält's aus hier
Beiträge: 5


D5 Prof
BeitragVerfasst: Di 19.08.03 14:59 
Titel: Varianten
Habe (wie oben geschrieben) schon verschiedene Varianten probiert:

In der Unit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure Daten(var Matrix : array of orray of byte); //geht gar nicht, da "array of" doppelt

//oder
procedure Daten(var Matrix : array of integer); //Versuch eines offenen Arrays

//oder
type
  TDaten = array of array of Byte;
...
procedure Daten(var Matrix : TDaten); //Kollidiert beim Aufruf aus dem Hauptprogramm

//oder
function Daten(...): array of array of byte; // 2x "array of" (siehe oben)

// eigentliche Zuweisung in der Prozedur/Funktion

Matrix[i,j]:=Hilf; //wobei Hilf vom Typ Byte ist

im Hauptprogramm:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
var BildDaten : array of array of Byte;

...
setlength(BildDaten,X,Y);
Daten(BildDaten);

//oder

type
   TDaten = array of array of Byte;  //Typdef. in Unit analog (s.o.)
...
var BildDaten : TDaten;
...
setlength(BildDaten,X,Y);
Daten(BildDaten);

//oder als Funktion

var BildDaten : array of array of Byte;

...
setlength(BildDaten,X,Y);
BildDaten:=Daten(...);

Es waren wohl ein paar mehr, aber die fallen mir nicht mehr spontan ein...

Gibt es eine Möglichkeit, einen Typen im Hauptprogramm so festzulegen, das die aufgerufene Unit auf diesen zurückgreifen kann??? Vielleicht löst das ja mein Problem...

Liebe Grüße,
Smithers

PS: Die eigentliche Zuweisung (Indizes i,j) ist sauber, es treten nur Typenkonflikte auf.

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Di 19.08.03 21:23 
Da merkt man wieder das die beste Hilfe nichts wert ist wenn man sie nicht benutzt :roll:

Zum Thema "Array-Parameter" findet man:
Zitat:
Bei der Deklaration von Routinen, die Array-Parameter entgegennehmen, können Sie in den Parameterdeklarationen keinen Indextyp angeben. Ein Beispiel:

procedure Sort(A: array[1..10] of Integer); // Syntaxfehler

Diese Deklaration führt zu einem Kompilierungsfehler.

type TDigits = array[1..10] of Integer;

procedure Sort(A: TDigits);

Diese Deklaration ist dagegen gültig. In den meisten Fällen ist der Einsatz offene Array-Parameter jedoch die bessere Lösung.


MfG,
Tryer
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 20.08.03 08:50 
Tryer hat folgendes geschrieben:
Da merkt man wieder das die beste Hilfe nichts wert ist wenn man sie nicht benutzt :roll:

Man muss diese Infos auch finden. Das ist meistens das Problem!

Gruß
Tino
Smithers Threadstarter
Hält's aus hier
Beiträge: 5


D5 Prof
BeitragVerfasst: Mi 20.08.03 09:58 
Titel: Lösung!!!
:D Heureka! :D

@ Tryer: Auf die Idee, einen Typen zu definieren bin ich ja auch gekommen! (siehe zitierte Quelltextvarianten)

Ich habe allerdings den Typen doppelt definiert, im Hauptprogramm und in der aufgerufenen Unit, klar das der Compiler damit nichts anfangen kann. *ÜberMichSelbstÄrger*

Es reicht den Typen brav im Interface-Teil der Unit zu definieren und er steht damit auch aufrufenden Programmen zur Verfügung!

Danke Eurer Mühe,

Smithers

PS: Manche Probleme sollte man überschlafen...