Pointer auf Procedure

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Pointer auf Procedure

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Pointer auf Procedure

Beitrag 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.
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
mk-soft
Beiträge: 3856
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Pointer auf Procedure

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Pointer auf Procedure

Beitrag von hjbremer »

ein sehr schönes Beispiel :allright:
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Animal
Beiträge: 8
Registriert: 10.04.2010 13:12

Re: Pointer auf Procedure

Beitrag von Animal »

Danke auch für die Prototype Beispiele. Ich denke, ich werde Prototype verwenden.

Gruesse,
Animal
PureBasic 4.50 beta2 (Mac OS X - Intel)
Rechner: iMac (24", Dual Core Intel, 3GB RAM, 300 GB HD, DVD) mit Mac OS X Intel 10.5.8 (Leopard)
Antworten