Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Dynamisches Array in Prozeduraufrufen 2
Smithers - Di 19.08.03 14:10
Titel: Dynamisches Array in Prozeduraufrufen 2
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 - Di 19.08.03 14:20
Wie übergibst du dein Array denn der Prozedur?
Ein wenig Quellcode wäre hilfreich.
Smithers - Di 19.08.03 14:59
Titel: Varianten
Habe (wie oben geschrieben) schon verschiedene Varianten probiert:
In der Unit:
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); procedure Daten(var Matrix : array of integer); type TDaten = array of array of Byte; ... procedure Daten(var Matrix : TDaten); function Daten(...): array of array of byte;
Matrix[i,j]:=Hilf; |
im Hauptprogramm:
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);
type TDaten = array of array of Byte; ... var BildDaten : TDaten; ... setlength(BildDaten,X,Y); Daten(BildDaten);
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
Tino: Delphi-Tags hinzugefügt.
Tryer - 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 - 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 - 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...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!