Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zugriffsverletzung zwischen zwei Units
THF - Mo 21.03.05 17:08
Titel: Zugriffsverletzung zwischen zwei Units
Hallo,
ich möchte in einem Nebenformular in der Unit2 in einem Edit-Feld etwas eintragen zum Beispiel 'Hallo' dies soll dann nach Bestätigung auf den OK-Button in ein Label im Hauptformular Unit1 eingetragen werden.
Ich bekomme dabei immer Fehlermeldungen weil man vom Nebenformular nicht auf das Hauptformular zugreifen kann.
Gruß
THF
Moderiert von
Christian S.: Überflüssige Zeilenumbrüche entfernt
IngoD7 - Mo 21.03.05 17:26
Ist die Unit1 per uses-Anweisung in Unit2 eingebunden?
THF - Mo 21.03.05 20:48
Hallo,
nein umgekehrt Unit2 ist bei uses in Unit1 eingebunden.
Gruß
THF
abakama - Mo 21.03.05 20:51
Du musst die Unit 1 auch in der Unit 2 einbinden.
THF - Mo 21.03.05 22:41
Hallo,
also das funktioniert nicht,
wenn ich Unit1 in Unit2 einbinde und dann noch
unit2 in Unit1 einbinde.
Ich glaube das funktioniert nicht!
Oder ? ?
Gruß
THF
retnyg - Mo 21.03.05 23:45
glaube nicht, probiere es einfach.
THF - Di 22.03.05 09:13
Hallo,
ich habs ausprobiert, funktioniert nicht!
Überkreuzender Bezug zweier Units.
Gruß
THF
Holgerwa - Di 22.03.05 10:36
Hallo,
setz mal das "Uses Unit1" nicht in den Interface-Teil von Unit2, sondern direkt nach "Implementation", dann funktionierts.
Holger
AXMD - Di 22.03.05 10:47
Hi :)!
Bitte ändere deinen Titel deines Beitrags so, dass er den Richtlinien entspricht. Dazu einfach den EDIT-Button rechts oben verwenden.
Richtlinien hat folgendes geschrieben: |
1.2 Beiträge
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist. [..] |
Danke :)
AXMD
magic87 - Fr 17.08.07 09:47
Der Beitrag wird jetzt erstmal wieder ein bisschen nach oben gepusht!=)
Ich wollte nämlich gerne wissen, warum es einen "Überkreuzenden Bezug" gibt, wenn man die Units gegenseitig im Inteface einbindet und wenn man die eine Unit im Interface und die andere im Implementation-Teil einbindet dann klappt es!
Hat dafür jemand eine logische und verständliche Erklärung?
Gruß
Bluemagicon
arj - Fr 17.08.07 11:11
Kurzes Beispiel:
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: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| unit Unit1;
interface
function Unit1Test(x : Integer) : string; implementation
uses Unit2;
function Unit1Test(x : Integer) : string; begin if x = 0 then Result := 'Unit1Test' else Result := Unit2Test(x); end;
unit Unit2;
interface
function Unit2Test(x : Integer) : string;
implementation
uses Unit1;
function Unit2Test(x : Integer) : string; begin if x = 0 then Result := Unit1Test(x); else Result := 'Unit2Test'; end; |
Der Compiler prüft beim Compilieren, ob die Typen zueinander passen, also ob du eine Funktion, die einen Integer erwartet,
auch mit einem Integer aufrufst. Dafür muss er allerdings nur die Signatur kennen. Diese wird bei * a * definiert.
Die Implementation, also der eigentliche Code der Funktion (* b *) muss keiner Typenprüfung nach außen hin standhalten. Da muss
nur intern alles stimmen. Also müssen vor dem jeweiligen Benutzen der anderen Funktionen die Signaturen bekannt sein, damit der
Compiler bei * c * prüfen kann, ob du die Funktion korrekt aufrufst.
Dass erreicht man damit, indem man die Units gegenseitig im Implementation-Teil einbindet, da hier dann einfach nur die Signaturen geschrieben werden müssen.
Ich hoffe es ist klarer geworden ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!