PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .



Merovinger
26.11.2008, 20:20
.

Ineluki
26.11.2008, 21:46
Wenn du solche zirkulaeren Abhaengigkeiten hast, stimmt etwas mit deinem Programmdesign nicht. Du kannst keine Datenstrukturen aufbauen, bei denen A ein Element B enthaellt, B aber wiederum vollstaendig A. Das wuerde ja auch dazu fuehren, dass sowohl A als auch B unendlich grosse Datenstrukturen waeren. (Man koennte ja dann sowas wie a.b.a.b.a.b.a.b... machen)

Das was du willst laesst sich auf 2 Arten loesen:

a) du verwendest in einer der Units Pointer auf Datenstrukturen und nicht die Datenstruktur selbst. Du kannst Pointer auf unbekannte Datenstrukturen deklarieren, da der Compiler zum Compilierungszeitpunkt nur die groesse einer Datenstruktur wissen muss. Da alle Pointer unabhaengig von der Datenstruktur, auf die sie Zeigen gleich gross sind (aus Gruenden der Simplizitaet verzichte ich mal auf den Unterschied zwischen Member- und Funktionspointern), muss der Compiler also nicht die vollstaendige Definition kennen, wodurch der Zirkelschluss unterbrochen ist

b) du exportierst die Funktionen, die du aus A benoetigst in eine DLL und bindest diese in B ein

c) du greifst nicht direkt auf Datnstrukturen in A von B aus zu, sondern uebergibst diese den Funktionen aus B als (VAR) Parameter oder Pointer

d) du packst sowohl A als auch B in ein und die selbe Unit. Units sind in sich geschlossene Programmeinheiten, weswegen es generell von schlechtem Design zeugt, wenn B A voraussetzt bzw umgekehrt.

Was dein Problem mit den Funktionen ausserhalb eines Objektes angeht, verstehe ich nicht, wo das Problem ist. Einfach mittels procedure btw function deklarieren und dann mittels der export Klausel veroeffentlichen ...

Ich nehme an, du hast so etwas, wie ein weiteres (Sub)Formular, nennen wir es Form2 und du willst nun in Unit1 von Form1 aus Form2 anzeigen lassen und dessen Funktionen Member von Form1 aendern. Daher musst du in Unit1 Unit2 (fuer Form1) einbinden und in Unit2 brauchst du Unit1 (fuer Form2). DAS ist ganz schlechter Stil. Lass Form1 Form2 aufrufen ueber Form2.Show oder Form2.ShowModal. Die Daten werden in Form2 abgefragt und zwischengespeichert. Dann sendst du von Form2 aus Daten an Form1 (Form1 setzt vor dem Form2.Show ueber einen Member von Form2 einen Pointer auf einen in Unit1 erzeugten Puffer) oder Messages an Form1 (Form1 uebergibt sein WindowHandle ueber einen Member an Form2) oder speicherst die Daten in Form2 zwischen, so dass Form1 spaeter die Daten auslesen kann.

Gruss Luki

Ineluki
29.11.2008, 12:43
b) ging leider nicht, da ich die funktion export in diesem programm nicht zur verfühgung habe


exports ist doch keine Funktion, sondern ein Sprachstatement fuer Units. Das kannst du sowohl zum erstellen von units als auch von DLLs benutzen.

Nun ja .. schoen, dass jetzt alles klappt. :D