Pointer auf Procedure

Anfängerfragen zum Programmieren mit PureBasic.
Animal
Beiträge: 8
Registriert: 10.04.2010 13:12

Pointer auf Procedure

Beitrag von Animal »

Hallo,

ich möchte einen Pointer auf eine Procedure A einer Procedure B übergeben.

Wie muss die Signatur der Procedure B aussehen, damit ich einen Pointer auf A übergeben kann?

Wie übergebe ich die Procedure A an B?

Wie rufe ich die als Procedure A an B übergebene Procedure im Rumpf von B auf?

Wäre für ein kleines Beispiel dankbar.

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)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Pointer auf Procedure

Beitrag von STARGÅTE »

Das Beispiel sollte alles zeigen:

Code: Alles auswählen

Procedure Test1(Value.i)
  Debug "Test 1"
  Debug Value
EndProcedure

Procedure Test2(Value.i)
  Debug "Test 2"
  Debug Value
EndProcedure

Procedure Beispiel(*ProcedurePointer, Value)
  CallFunctionFast(*ProcedurePointer, Value)
EndProcedure


*Proc1 = @Test1()

Beispiel(*Proc1, 10)
Beispiel(@Test2(), 20)
Wichtiges Element ist hier: CallFunctionFast()
Informationen dazu findest du in der Hilfe
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: Pointer auf Procedure

Beitrag von WPö »

Animal hat geschrieben:Gruesse
Zunächst einmal, ohne etwas zur Sache zu sagen: Willkommen!
Stargate hat bereits etwas geschrieben.
Bitte in der Signatur Rechnerausstattung, Betriebssystem und PB-Version angeben.
Auch Deine Tastatur hat Umlaute!

Gruß - WPö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Animal
Beiträge: 8
Registriert: 10.04.2010 13:12

Re: Pointer auf Procedure

Beitrag von Animal »

Prima. Das ging ja fix.

Lieben Dank,
Animal
STARGÅTE hat geschrieben:Das Beispiel sollte alles zeigen:
...
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)
Animal
Beiträge: 8
Registriert: 10.04.2010 13:12

Re: Pointer auf Procedure

Beitrag von Animal »

Danke.

Ist's so besser? Das mit der Tastatur verstehe ich nicht.

Gruesse,
Animal
WPö hat geschrieben:
Animal hat geschrieben:Gruesse
Zunächst einmal, ohne etwas zur Sache zu sagen: Willkommen!
Stargate hat bereits etwas geschrieben.
Bitte in der Signatur Rechnerausstattung, Betriebssystem und PB-Version angeben.
Auch Deine Tastatur hat Umlaute!

Gruß - WPö
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)
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 »

Animal hat geschrieben:Das mit der Tastatur verstehe ich nicht.
Das muss man auch nicht verstehen, ist so eine komische Macke von Ihm.
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 »

ein Beispiel mit Prototype. siehe auch PB-Hilfe

Code: Alles auswählen

;dieser Teil befindet sich in einer DLL oder Include
; und soll nicht verändert werden.
; und das zuweisen der Daten soll extern erfolgen

Prototype pHoleDaten(Array c(1))   ;kann auch mehr Parameter haben
   
Procedure Diagramm(adresse, flag)

HoleDaten.pHoleDaten = adresse     ;Prototype Zeiger zuweisen

Dim dtn(0)        ; sehr wichtig muß hier definiert werden
HoleDaten(dtn())  ; Anzahl Parameter muß gleich Prototype Definition sein

;Daten auswerten
;z.B. erstelle Diagramm

farbe = #Blue
If flag: farbe = #Red: EndIf   ;tue irgendwas

For j = 0 To ArraySize(dtn())
 Debug dtn(j)
Next

EndProcedure


;das Hauptprogramm

Procedure xyz(Array dtn(1))
; füllt Array

max = 21
Dim dtn(max)  ;Datenfeld dimensionieren

;Feld mit Daten von irgendwoher füllen
dtn(1) = 11
dtn(11) = 22
dtn(21) = 33

EndProcedure

Diagramm(@xyz(),1)


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
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Pointer auf Procedure

Beitrag von STARGÅTE »

Thx hjbremer, das hat auch mir sehr geholfen ...
Hatte vorher nicht so den Durchblick bei Prototype

Obwohl die ersten Zeilen aus Diagramm zimlich ungewohnt sind.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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 »

Für ein Beispiel wohl etwas zu kompliziert. Hier nochmal das Beispiel von STARGÅTE
mit Prototypes, damit man sieht das Prototypes keineswegs komplizierter als
CallFunction... sind.

Code: Alles auswählen

Prototype Test(value.i)

Procedure Test1(Value.i)
  Debug "Test 1"
  Debug Value
EndProcedure

Procedure Test2(Value.i)
  Debug "Test 2"
  Debug Value
EndProcedure

MyTest1.Test = @Test1()
MyTest2.Test = @Test2()

MyTest1(10)
MyTest2(20)
PS: Die neue IDE ermöglicht das automatische oder nachträgliche Einrücken,
was die Lesbarkeit erheblich erhöht.

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
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Pointer auf Procedure

Beitrag von Josh »

kompliziert sind prototypen ja eigentlich nicht. aber das ist auch so ein punkt, wo sich mein hirn ein bischen quer legt. keine ahnung warum. aber trotzen eine frage dazu, wenns auch nicht unbedingt ganz hier her passt.

kann man interfaces eigentlich als eine sammlung von prototypen sehen?
Antworten