Funktion aus string aufrufen
-
Hi, gibt es eine moeglichkeit, wenn der user einen string eingibt, den direkt als command aufzurufen?
Quasi so ungefaehr:scanf("%s", command); command();oder so aehnlich
!!!Geht das irgendwie? Also nicht dass ich jede Eingabe mit if abfragen muss und dann die jeweilige funktion aufrufen muss.
-
Was meinst du mit Command? Normale API-Funktionen oder Programme (so wie in der Konsole)
-
Einfach nur meine eigene funktion im code.
Also quasi:int rechen() { blablalba } int main() { char command[20]; scanf("%s", command); //jetzt gibt der user `rechnen` ein command(); //nun soll rechnen ausgefuehrt werden return 0; }
-
Versuch's mal mit GetProcAddress().
Geht aber graub ich nur, wenn die Funktion in ner DLL ist.
-
Nein ich will die aber in meiner exe ham, die funktion!!!! Also ohne DLL usw.
-
Weiss denn keienr eine Antwort?
Ach und nochwas: Wie kann man von einem String die ersten n Zeichen von links/rechts oder von einem bestimmten zeichen im string aus abschneiden? Gibt es dafuer eine stringfuktion?
-
JA
-
Wenn du vorne Wegscheiden willst kannst du einfach den Pointer hochzählen, von hinten einfach indem du das Zeichen an der betreffenden Stelle auf 0 (nicht '0') setzt

-
was du brauchst sind funktionpointer http://www.function-pointer.org/
aber so einfach wie da oben dargestellt lässt sich dieses nicht lösen.wenn du in c++ schreibst (vermute mal nicht nach deinem obrigen code zu urteilen)
könntest du dieses einfach mit ner map (string, funcptr) lösen. map nach eingegebenen string durchsuchen. funktion ausführen.
-
Ich glaub er sucht sowas wie die Funktion
int system(char* command)
-
er möchte eine funktion innerhalb von seinem progs mittels einem string aufrufen.
siehe dritter post.
-
Tatsächlich, was ist das dann aber für eine schwachsinnige Frage? Und was hat es mit WinAPI zu tun?
bool command(char* eingabe){ if(!strcmp(eingabe, "rechnen")rechnen(); else if(!strcmp(eingabe, "sonstwas")sonstwas(); else return true; //Funktion nicht gefunden return false; }anders gehts nicht
-
D@niel $chumann schrieb:
Tatsächlich, was ist das dann aber für eine schwachsinnige Frage?
ich wollt übrigens auch erst system posten. stimme dur zu die frage war nicht
sehr gut gestellt.D@niel $chumann schrieb:
Und was hat es mit WinAPI zu tun?
nix

D@niel $chumann schrieb:
anders gehts nicht
mein vorschlag geht auch noch

-
ja und weiter???? .... :p mehr *laechz*
-
XFame schrieb:
ja und weiter???? .... :p mehr *laechz*

-
naja das mit dem system, erklaer das mal...
//e: sry ich meinte das, wo er die funtkion system nannte...hab nicht gesehen, dass der post schon 2 seiten hatte

-
system() ist eine funktion um externe programme zu starten.
-
miller_m schrieb:
mein vorschlag geht auch noch

ja stimmt (ist ja im Prinzip das selbe)
-
D@niel $chumann schrieb:
miller_m schrieb:
mein vorschlag geht auch noch

ja stimmt (ist ja im Prinzip das selbe)
ich dacht nur an eine einfache erweiterbarkeit.
irgendwo im init code einfach alles der map hinzufügen und das ausführen bleibt immer gleich.// pseudo code map<string, func*>::iterator it = MapFunc.find(strFind); if(it != MapFunc.end()) // ausführen der funktion über it->second
-
Ich widerspreche dir ja auch gar nicht. Ist klar, dass dein Vorschlag luxoriöser ist (die SDL is sowieso voll der Luxus
), aber das Prinzip (Vergleichen von Strings) bleibt das gleiche und da kommt man nicht drum rum.