2009-04-25 10 views
3

Ich möchte in der Lage sein, eine oder mehrere der folgenden aus der Shell zu tun: - rufen Sie eine Funktion aus dem Programm nicht nur die Haupt - übergeben Sie Parameter, die nicht nur Zeichenfolgen sind (nicht nur argv) - haben a Programm return nicht nur int (der Rückkehrcode von Main) - zurückgegebene Werte zu Shell-Level-Variablen, um sie an andere Programme übergeben könnenGibt es ein System, in dem das Ausführen eines Programms und das Aufrufen einer Funktion vereinheitlicht ist?

Sie bekommen die Idee. Zum Beispiel Python Toplevel erlauben dies für Python-Programme. Was ist mit C++? Oder ein ELF-Ersatz auf Linux, die das zulassen würde?

Antwort

2

Wenn Sie nach einem Betriebssystem suchen, das dies tut - der vxWorks Shell/C-Interpreter tut dies.

Aber es ist vxWorks - ein Echtzeit-Betriebssystem (keine GUI).

2

Es ist nicht schwer, eine App zu entwickeln, mit der man bestimmte Funktionen namentlich aus dynamischen Bibliotheken wie DLLs unter Windows aufrufen kann, sofern diese Funktionen nur eine begrenzte Auswahl an Parametertypen wie Ints, Floats und Fixed enthalten Saiten.

Für die meisten C++ - Programme ist dies jedoch nicht ausreichend. Angenommen, Ihre C++ - Funktion übernimmt s std :: mapp für einen dynamischen String als Parameter in den Socket - wie werden Sie die Map erstellen, ganz zu schweigen von ihrem Inhalt in Ihrer Shell?

Aber wenn Sie auf C++ verzichten können, gibt es eine Sprache cum Betriebssystem, das genau das tut, was Sie vorschlagen - Smalltalk. Wenn Sie sich für dieses Paradigma interessieren, werfen Sie einen Blick auf Squeak, die freie Software ist.

+1

Es gibt bereits ein Programm wie das unter Windows: rundll32.exe –

+0

Eigentlich würde dies mit jeder bildbasierten Umgebung, die eine Art von REPL, z. einige Common Lisp-Implementierung. Sie müssen nur einige Funktionen schreiben, die die allgemeinen Systemaufrufe umschließen. – Svante

0

Das System müsste komplett interpretiert werden, oder? Und woher weißt du die Funktionssignaturen der Dinge, die du anrufst?

+0

Die App wird es durch Reflexion wissen. Die App kann eine Fehlermeldung anzeigen, wenn die Signatur nicht übereinstimmt. – CDR

2

Unter Windows gibt es RUNDLL32 DLL-Funktion aufrufen, zB

RUNDLL32.EXE USER32.DLL,SwapMouseButton