web-dev-qa-db-ja.com

Emscripten-コマンドライン引数を渡す

私はCプログラムをJavascriptに「翻訳」した(Wordが適切かどうかわからない)ので、node.jsで使用できます。 Cプログラムは、コマンドラインパラメータを受け付けるmainで構成されています。これらのコマンドライン引数を渡すために、どういうわけかモジュールオブジェクトを使用する必要があることを理解していますが、私は途方に暮れています。

私のjsプログラムは、program.js(jsにコンパイルされたCプログラム)とtest.js(var module = require( './ program.js'))と、このインポートされたプログラムで動作する残りの2つのファイルで構成されています。

問題は次のとおりです。このCに変換されてからJavaScriptにインポートされたプログラムに引数を渡すにはどうすればよいですか。

3
Lugi

Emscriptenには Module というグローバルオブジェクトがあり、これには arguments プロパティがあります。このプロパティには、渡される引数の配列が含まれています。emscriptenにコンパイル済みプログラムを実行させる前に、引数を設定するだけです。

そのように、JavaScriptでは:

Module['arguments'].Push('first_param');
Module['arguments'].Push('second_param');

C:

int main(int argc, char *argv[])
{
    assert(argc == 3);
    assert(strcmp(argv[1], "first_param") == 0);
    assert(strcmp(argv[2], "second_param") == 0);
}

あるいは、C関数をmain関数を使用して実行可能ファイルとして構築するのではなく、個々のC関数をjavascriptに公開するライブラリとして構築することを検討することもできます。次に、これらの関数は適切に名前が付けられ、型指定された引数を持つことができ、それらを呼び出すときにJavaScriptから直接(ほとんど)引数を渡すことができます。

6
michalsrb