Announcement

Collapse
No announcement yet.

Units, was muß beachtet werden, damit zwei Units zusammenarbeiten können?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Units, was muß beachtet werden, damit zwei Units zusammenarbeiten können?

    Hi<br><br>
    Kann mir jemand ein allgemein gültiges,verständliches Beispielprogramm<br>
    geben, das zeigt, wie man zeiw Units miteinander verknüpft und diese dann<br> auch zusammenarbeiten (also functionen und prozeduren aus der anderen Unit aufgerufen werden können))<br><br>
    Gruß,<br>
    Marco

  • #2
    Ich hoffe ich habe es nicht zu kompliziert gemacht. Die Methoden Function1 und Function2 bzw. Procedure1 und Procedure2, jeweils in Unit1 und Unit2 rufen sich gegenseitig auf. Die Parameter werden dabei als Zähler verwendet, um nicht eine Endlosrekursion aufzurufen.

    unit Unit1;<br>
    <br>
    interface<br>
    function Function1(Param1: Integer): Integer;<br>
    procedure Procedure1(Param1: Integer);<br>
    <br>
    implementation<br>
    <br>
    uses<br>
    Unit2;<br>
    <br>
    function Function1(Param1: Integer): Integer;<br>
    begin<br>
    Result := Function2(Param1);<br>
    end;<br>
    <br>
    procedure Procedure1(Param1: Integer);<br>
    begin<br>
    Procedure2(Param1);<br>
    end;<br>
    <br>
    end.<br>
    <br>
    unit Unit2;<br>
    <br>
    interface<br>
    <br>
    function Function2(Param2: Integer): Integer;<br>
    procedure Procedure2(var Param2: Integer);<br>
    <br>
    implementation<br>
    <br>
    uses<br>
    Unit1;<br>
    <br>
    function Function2(Param2: Integer): Integer;<br>
    begin<br>
    if Param2 = 5 then Result := Param2<br>
    else Result := Function1(Param2 + 1);<br>
    end;<br>
    <br>
    procedure Procedure2(var Param2: Integer);<br>
    begin<br>
    if Param2 < 10 then Procedure1(Param2 + 1);<br>
    end;<br>
    <br>
    end.<br>
    <br>
    program Project1;<br>
    <br>
    uses<br>
    Unit1 in 'Unit1.pas',<br>
    Unit2 in 'Unit2.pas';<br>
    <br>
    {$R *.RES}<br>
    <br>
    var<br>
    Param: Integer;<br>
    <br>
    begin<br>
    Param := 1;<br>
    Param := Function1(Param);<br>
    Procedure1(Param);<br>
    end.<br>

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Nochmal etwas allgemeiner: Jede unit muss hinter dem Wort uses aufzählen, auf welche anderen units es zugreifen will. Nur die dort aufgezählten units kann man dann verwenden, weiterhin sin immer nur die Variablen/prozeduren/funktionen "sichtbar" (also aufrufbar), die diese andere unit im obersten Bereich der unit (deklaration) also vor dem Wort implemantation bekannt gibt

      Comment


      • #4
        Noch eine allgemeine Ergänzung: Wenn sich zwei Units gegenseitig benötigen (wie im o.g. Bsp.) dann müssen die uses Deklarationen jeweils im Implementation Abschnitt untergebracht werden - ansonsten meckert der Compiler. Benötigt man die Units schon im Interface Teil (wg.Typdefinitionen o.ä), dann lagert man diesen Code am besten in eine dritte Unit aus, die dann von den beiden anderen im Interface Teil verwendet werden kann
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X