2009-04-25 6 views
3

私は、シェルから次のうちの1つ以上を実行したいと思っています: - メインプログラムだけでなく、プログラムから何らかの関数を呼び出す - 文字列(argvだけではない)を渡すパラメータ - プログラムだけでなくint(戻りコードはメインから) - 戻り値をシェルレベルの変数に代入して、他のプログラムに渡すことができます。プログラムを実行して関数を呼び出すシステムは統一されていますか?

たとえば、python toplevelはこれをPythonプログラムに許可します。 C++についてはどうですか? それを可能にするLinux上のELF置換?

答えて

2

これを実行するオペレーティングシステムをお探しの場合は、vxWorksのシェル/ Cインタプリタがこれを行います。

しかし、vxWorksはリアルタイムオペレーティングシステムです(GUIはありません)。

2

int、float、fixedなどのパラメータの種類が限られている場合、WindowsのDLLなどのダイナミックライブラリから特定の関数を名前で呼び出すことができるアプリを考えるのは難しくありません。文字列。

しかし、ほとんどのC++プログラムではこれでは不十分です。例えば、あなたのC++関数が、パラメータとしてstd :: mapを動的文字列のsocketに持っていくと仮定します。あなたのシェルの中身は何も言わないで、マップをどのように作成しようとしていますか?

しかし、あなたがC++を忘れることができれば、まさにあなたが示唆しているもの、つまりSmalltalkを実行する言語が一組のオペレーティングシステムです。このパラダイムに興味があるなら、無料のソフトウェアであるSqueakを見てください。

+1

Windowsのようなプログラムが既にあります:rundll32.exe –

+0

実際、これはREPLの何らかの種類を提供する画像ベースの環境で動作します。いくつかのCommon Lisp実装。共通のシステムコールをラップするいくつかの関数を書くだけでいいです。 – Svante

0

システムを完全に解釈する必要がありますか?そして、あなたが呼んでいたものの機能署名をどのように知っていますか?

Windowsでは
+0

アプリはリフレクションによってそれを知るでしょう。署名が一致しない場合は、エラーメッセージが表示されることがあります。 – CDR

2

、RUNDLL32は、DLL関数を呼び出すことがあり、例えば

RUNDLL32.EXE USER32.DLL,SwapMouseButton 
1

は、あなたがc-replを見たことがありますか?