Funktion aus String starten

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das ist ja sehr schön, dass ihr alle wisst, was er meinte, ohne das er im mindesten in der lage sein musste, eine sinnvolle frage zu formulieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@sen-me
in einem string werden alle zeichen (so glaube ich), außer als character interpretiert, egal ob schlüsselwort oder bezeichner(variable oder procedur ect.)

Code: Alles auswählen

Debug "bla NewList Debug InitSPrite() MyVar MyProc() bla"
gibt die zeichenfolge aus die zwischen " " steht, egal ob predefined oder selbst-definierte bezeichner enthalten sind. output:

Code: Alles auswählen

bla NewList Debug InitSPrite() MyVar MyProc() bla
wenn du solch eine procedure definierst:

Code: Alles auswählen

Procedure.s SayYes()
    ProcedureReturn "YES"
EndProcedure
dann

Code: Alles auswählen

Debug "bla SayYes() bla"
<output:>
bla SayYes() bla
bzw

Code: Alles auswählen

Debug "bla" + SayYes() + "bla"
<output:>
bla YES bla
wenn in deiner procedure noch eine zeile mit MessageRequester(...) steht, dann wird dieser MR zur laufzeit nur im zweiten beispiel ausgeführt
Geht das?
ja, was du geschrieben hast geht, aber es macht keinen sinn. deine procedur wird nicht aufgerufen/ausgeführt
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Hmmm ne ich will kein Compiler baun oda so ich wollt nen Server-Client machen, wo der Server Funktionen aufruft, so muss ich nicht alles in Client einfügen...
Bild
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

:? nen Server-Client ???
du willst wahrscheinlich mit nem client nen string an nen server schicken, und der server soll dann aus dem erhaltenen string den prozedurnamen rausfischen und die procedure aufrufen.(?) ja der server, als eigenständiges programm, kennt die procedure aber nich, wenn sie nur im client-programm definiert wurde (oder auch andersrum)! du kannst keine procedures verschicken. (du könntest höchtens deine procedure als mini-program, also als compilierte *.exe verschicken. und der server kann das erhaltene programm dann starten). wenn der client den server dazu bringen will nen MR("Ja","Ja",...) anzuzeigen, dann musst du selber eine nachricht definieren, von mir aus als string, z.b.:

Code: Alles auswählen

nachricht$="machnenRequi!"
und die dann verschicken,
und der server prüft dann

Code: Alles auswählen

If erhalteneNachricht$="machnenRequi!"
    MessageRequester("ja","ja",...)
EndIf
Zuletzt geändert von #NULL am 29.05.2006 18:21, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

so etwas könntest du lösen, indem du dir einen interpreter bastelst.

der client hat eine befehlsbibliothek und eine laufzeitumgebung.
der server sendet befehle mit argumenten,
die der client innerhalb dieser umgebung verarbeiten kann.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

wenn es nur darum geht, dass du eine selbstdefinierte procedure in beiden programmen (server+client) brauchst, diese aber nicht jeweils extra maunell in den quellcode pappen willst, dann pack sie doch einfach in eine include-datei, und importiere diese inc.datei in beide programme!(?)
siehe PB-hilfe: IncludeFile
[oder hier nochmal nachfragen, wennde ni west wi]
OR...
bezüglich eines gewöhnlichen MessageRequetschrejdhjscncndcdc...... :
im client:

Code: Alles auswählen

nachricht$="OOOoooooooh Yes, Sir!!!"
...verschicken..
und im server:

Code: Alles auswählen

MessageRequester("TITTL", erhalteneNachricht$,0)
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

Beitrag von ts-soft »

Vielleicht hilft diese kleine Spielerei ja weiter :wink:

Code: Alles auswählen

Macro DefineProc(NAME)
  Procedure NAME(Titel.s, Text.s, Flag.l = 0)
    ProcedureReturn MessageRequester(Titel, Text, Flag)
  EndProcedure
EndMacro

DefineProc(SagWas)
DefineProc(SagWasAnderes)

SagWas("Sag Was", "Ja")
SagWasAnderes("Sag Was Anderes", "Nein")
SagWas("Was denn", "Es ist ein Fehler aufgetreten", #MB_ICONERROR)


DefineProc(DeinAlter)
DefineProc(YES)
DefineProc(NO)

Select DeinAlter("Dein Alter", "Bist Du schon 18?", #PB_MessageRequester_YesNo)
  Case #PB_MessageRequester_Yes
    YES("Oh", "doch so alt", #MB_ICONINFORMATION)
  Case #PB_MessageRequester_No
    NO("Pech", "dann darfste den Film nicht sehen", #MB_ICONEXCLAMATION)
EndSelect
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