Funktion zum Funktion-Ausführen?



  • Hi!

    Gibts eigentlich eine Funktion, mit der ich einen Funktionsaufruf z.B. aus einem String ausführen kann?

    Also vergleichbar mit cmd.exe /C "C:\Test.exe", was ein Progamm aus einem String aufruft.

    MfG

    Matg40



  • Meinst du, du hast n String vorliegen, beispielsweise "MFunc();" und das Programm soll dannn MFunc() aufrufen.
    Das geht in C++ nicht direkt.



  • Hi,

    schade... aber Danke für die schnelle Antwort.

    Wenn der Code nicht erst compiliert werden müsste, könnte ich den Befehl in eine Datei schreiben und ausführen (mit dem nötigen Drumherum).

    Leider soll die Anwendung auf verschiedenen Plattformen laufen, drum kann ich nicht einfach Scripte nehmen...

    MfG

    Matg40



  • Solche Konstrukte kriegst du nur mit interpretierten Sprachen hin.

    Wenn es eine begrenzte Anzahl von Befehlen ist, die je nachdem ausgeführt werden sollen kannst du ja ein Argument an dein Programm übergeben oder halt die Dateieinlesen und einzeln prüfen.
    (Hier sind evtl. Funktionszeiger ganz sinnvoll.)



  • Welches Problem hoffst du denn damit zu lösen?



  • Hi,

    ich wollte sowas wie einen Befehlsserver erstellen, der auf einem Ziel-PC Anweisungen ausführt:

    PC1<------------------------>Tcp/IP>--->PC2

    LiesRegistry(Key...)-------->
    <-------Key-Inhalt

    Evtl. könnte ich es wie vorgeschlagen machen und für einfache Anwendungen Nachrichten an den Server schicke, die Parameter für seine Funktionalitäten enthalten.

    Der Server müsste dann halt alles können... (SmartServer statt SmartClient)

    MfG

    Matg40



  • Matg40 schrieb:

    Hi,

    ich wollte sowas wie einen Befehlsserver erstellen, der auf einem Ziel-PC Anweisungen ausführt:...

    Also da sehe ich nicht so die Notwendigkeit dieser Flexibilisierung. Ich würde schon aus Sicherheitsaspekten dan klar definieren, welche Services Dein Server unterstützt (z.B. "LiesRegistry") und diese dann programmieren. "Über die Leitung" geht dann eigentlich nur noch die Kennung (string, Zahl, Struktur, ....), welcher Service gewünscht wird.
    Im Server selbst (der ja dann weiß, auf welcher Plattform er läuft) kannst Du natürlich plattformspezifische Skripte aufrufen, denn "der umgekehrte Weg" funktioniert ja schon:

    string Server::LiesRegistry(string const& regKey) {
       string const command = "regedit -read " + regKey + " > Server_LiesRegistry.out"; // oder wie immer der Befehl lauten mag
       system(command.c_str());
       ifstream outFile("Server_LiesRegistry.out");
       string out;
       outFile >> out;
       return out;
    }
    

    ACHTUNG: Der Befehl ist Phantasie und diese Programmierung ist übelst anfällig für "script injection"-Angriffe !!

    Sie soll nur das Konzept verdeutlichen.

    Gruß,

    Simon2.



  • Hi,

    ja, in dieser Art werde ich es lösen müssen...

    Anfangs kam mit ein "Dummer" Server praktisch vor, der einfach nur Befehle weitergibt.

    Aber das ist so wohl nicht lösbar (letztendlich ist es ja auch nicht unbedingt nötig, einen der beiden Komponenten müsste ich bei Erweiterungen eh ändern 😉

    Jedenfalls vielen Dank für die Antworten!

    MfG

    Matg40



  • Hi,

    also für "Dumme Server" gibt es "Konsolenprogramme" (via telnet, ssh, ....) - aber sie schlegen Dich eben mit der Plattformabhängigkeit (bzw. hier eben shell-Abhängigkeit) und das wäre immer Dein Problem mit einem "Dummen Server":

    • Er selbst muss zwar nicht die Plattformspezifika kennen (was aber kein Problem wäre, weil man ihn ja für die spezielle Plattform compilieren muss - dafür muss er die sowieso kennen),
    • dafür muss aber sein Bediener diese Plattformspezifika kennen. Und damit bringt die Plattformabhängigkeit nicht viel.

    Ich hätte es jedenfalls lieber, wenn der Programmierer einmal diesen Job übernimmt als dass ich das bei jeder Benutzung des Programms machen muss.

    Wie gesagt: Wenn Dich das aber nicht stört (bzw. Du das unbedingt willst), nimm doch telnet&Co - die machen das prima.

    "Ein Programm, das 'irgendwie alles' kann, braucht keiner !" 😉

    Gruß,

    Simon2.


Anmelden zum Antworten