Seite 1 von 1
Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBack())
Verfasst: 31.12.2013 17:11
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?
Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac
Verfasst: 31.12.2013 17:13
von RSBasic
Code: Alles auswählen
Procedure abc()
Debug "Hallo"
EndProcedure
Debug @abc();Adresse
CallFunctionFast(@abc());Aufruf
Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac
Verfasst: 31.12.2013 17:19
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
Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac
Verfasst: 31.12.2013 17:22
von PureLust
*Autsch* ... tausend mal benutzt, aber nach so langer PB-Abstinenz komplett vergessen.
Vielen Dank Ray & Kevin
Wünsche Euch (und natürlich auch den anderen PBlern) 'nen guten Rutsch und ein tolles 2014.

Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac
Verfasst: 31.12.2013 17:22
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
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)
Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac
Verfasst: 02.01.2014 13:06
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.

Re: Prozedur per Adresse aufrufen (z.B.von @myPrivateCallBac
Verfasst: 02.01.2014 13:29
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?
CallFunction... sind überbleibsel von PB3, nach Möglichkeit einfach ignorieren und nicht mehr nutzen.
Goto-Freaks und andere natürlich ausgenommen
Gruß
Thomas