Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBack())

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBack())

Beitrag von PureLust »

Hi Leuts,

ich scheine momentan irgendwie auf'm Schlauch zu steh'n (auh mann ... das Alter, das Alter). :?
Ich suche den Befehl um eine PB-Prozedur per Adresse aufzurufen.

Jemand 'nen Tipp?
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac

Beitrag von RSBasic »

Code: Alles auswählen

Procedure abc()
  Debug "Hallo"
EndProcedure

Debug @abc();Adresse

CallFunctionFast(@abc());Aufruf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac

Beitrag von Kevin »

Hi,

Es gibt noch eine zweite Möglichkeit:

Code: Alles auswählen

Procedure abc(parameter)
  Debug "Hallo "+Hex(parameter)
EndProcedure

Prototype abc_ka(parameter)

*example2.abc_ka = @abc()

*example2(2)
Grüße
kevin
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac

Beitrag von PureLust »

*Autsch* ... tausend mal benutzt, aber nach so langer PB-Abstinenz komplett vergessen. :(

Vielen Dank Ray & Kevin :allright:

Wünsche Euch (und natürlich auch den anderen PBlern) 'nen guten Rutsch und ein tolles 2014. :mrgreen:
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
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: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac

Beitrag von ts-soft »

Die Möglichkeit mit Prototype ist die einzige, die man nutzen sollte.
Solange es keine Parameter in dem Beispiel von RSBasic gibt, ist es
aber nicht ganz so schlimm :wink:

Allerdings finde ich am zweitem Beispiel die pointerdeklaration unnötig/falsch.

Code: Alles auswählen

EnableExplicit

Procedure abc(parameter)
  Debug "Hallo "+Hex(parameter)
EndProcedure

Prototype abc_ka(parameter)

Define example2.abc_ka = @abc()

example2(2) 
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
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac

Beitrag von Tommy »

Geile Sache. Das habe ich auch noch nicht gewusst das man mit so etwas machen kann.
ts-soft: Wenn Parameter übergeben werden müssen warum ist Prototype die einzige die man nutzen sollte?
Basierend auf rs-basics Code könnte man auch so machen oder?

Code: Alles auswählen

Procedure abc(iVar, sVar.s)
Debug iVar
Debug sVar
EndProcedure
CallFunctionFast(@abc(), 25, @"String und so")
Sieht einfacher und kürzer als mit Prototype aus ohne extra Define usw. Kannst du mir erklären was daran falsch oder ungeeignet ist? Ich will es nur verstehen. :)
Zuletzt geändert von Tommy am 27.01.2015 11:28, insgesamt 2-mal geändert.
PB 5.41 x64
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: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac

Beitrag von ts-soft »

@Tommy

1. Ohne Prototype, kann nur Integer als Ergebnis zurückgegeben werden, also keine Quad, Double usw. (bzw.
Strings werden leider nicht als solche zurückgegeben, sondern als Pointer)
2. Der Type der Parameter kann nicht festgelegt werden, es sind immer Integer. Quad, String usw. funktionieren nicht!
3. Optionale Parameter, Pseudo-Types usw., sind nicht möglich.
4. Der Compiler kann die anzahl der angegebenen Parameter nicht überprüfen und übergibts diese ohne Überprüfung.

>> Sieht einfacher und kürzer als mit Prototype aus ohne extra Define usw
Willst Du sauber Programmieren oder schöne "Sch*isse" produzieren? :mrgreen:
CallFunction... sind überbleibsel von PB3, nach Möglichkeit einfach ignorieren und nicht mehr nutzen.
Goto-Freaks und andere natürlich ausgenommen :mrgreen:

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
Antworten