Seite 2 von 2

Re: Pointer auf Procedure

Verfasst: 10.04.2010 22:24
von ts-soft
Prototype hat gewisse Ähnlichkeit mit Interface oder auch mit Strukturen.
Durch den Prototype wird also eine passende Speichergrösse an die Funktion
übergeben. By CallFunction werden ja immer nur Integer bzw. Pointer übergeben,
was dann Problematisch bei Quad usw. wird. Auch die Übergabe von Strings ist
so nicht sehr sicher.
Ausserdem kann der Compiler auch die Anzahl und Art der Parameter überpüfen
und somit auch auf Fehler reagieren, was ohne Prototypes garnicht möglich wäre.

Das Prototypes ähnlichkeit mit Interface und Strukturen hat, merkt man auch daran,
das man keine Namen, die Bereits als Interface oder Strukturname vergeben sind
nutzen kann. Variablennamen spielen dabei keine Rolle.

Trotz allem finde ich ein Tutorial für Prototypes sollte eigentlich überflüssig sein.
Wer versucht das ganze zu Verstehen, wird das auch problemlos schaffen.

Gruß
Thomas

Re: Pointer auf Procedure

Verfasst: 10.04.2010 22:50
von hjbremer
STARGÅTE hat geschrieben:Obwohl die ersten Zeilen aus Diagramm zimlich ungewohnt sind.
Ja, das ist der Nachteil von Prototype. Es ist recht schwer alte Pfade zu verlassen.
Und man kann natürlich mein Beispiel auch auf die klassische Art lösen, indem man einen Zeiger aufs Feld übergibt.

Der Vorteil sind aber wirklich unabhängige Includes oder Dlls

Ein anderes Beispiel wäre eine Eingaberoutine, die von verschiedenen Programmen mehrfach aufgerufen wird und in einer Include steckt. Diese Eingaberoutine ruft eine externe Prozedur auf um auf #true oder #false zu testen. Diese KontrollProzeduren können dann sehr speziell auf das Hauptprogramm zugeschnitten sein.
z.B.
Eingabe(@Iszahl())
Eingabe(@IsChar())
Eingabe(@IsEingabeeineBLZ())
Eingabe(@IsEingabeeineStadtinDeutschland()) usw.

Re: Pointer auf Procedure

Verfasst: 11.04.2010 11:55
von mk-soft
Interresant werden Prototypen wenn man in eine Procedure verschieden Unterproceduren übergeben kann.

Ein einfaches Beispiel

Code: Alles auswählen

Prototype Check(value1.i, value2.i)

Procedure CheckGT(value1.i, value2.i)
  
  If value1 > value2
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
  
EndProcedure

Procedure CheckLT(value1.i, value2.i)
  
  If value1 < value2
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
  
EndProcedure

Procedure MyCheck(value1.i, value2.i, proc.check)
  
  Protected result
  result = proc(value1, value2)
  
  ProcedureReturn result
  
EndProcedure

Debug MyCheck(10, 20, @CheckGT())
Debug MyCheck(10, 20, @CheckLT())
FF :wink:

Re: Pointer auf Procedure

Verfasst: 11.04.2010 13:59
von hjbremer
ein sehr schönes Beispiel :allright:

Re: Pointer auf Procedure

Verfasst: 11.04.2010 16:56
von Animal
Danke auch für die Prototype Beispiele. Ich denke, ich werde Prototype verwenden.

Gruesse,
Animal