私はEmscripten/javascriptだけでなく、このOverstackコミュニティも初めてです。私の状況がすでに解決されていれば、事前にお詫び申し上げます。コンパイルされたコードをemscriptenに渡す/返す配列ポインタを処理する方法は?
Windows 7の環境では、emccを使って単純なCプログラムをコンパイルしました。これは、配列を受け入れ、変更します(下記参照)。
emccの-oオプションを使用して、ブラウザにロードした.htmlファイル(Chrome)を生成しました。
python emcc displayArray7.c -o displayArray7.html -s EXPORTED_FUNCTIONS="['_main', '_displayArray'
ロード時に、ブラウザウィンドウ内で生成される出力が期待どおりであることがわかります(下記参照)。
JavaScriptコンソールを介しmodule.cwrap()コマンドを使用して、直接機能を起動しようしかし
doubleVector[0] = 1.000000
doubleVector[1] = 2.000000
doubleVector[2] = 3.000000
modified doubleVector[0] = 98.000000
modified doubleVector[1] = 99.000000
modified doubleVector[2] = 100.000000
array1[0] = 98.000000
array1[1] = 99.000000
array1[2] = 100.000000
array2[0] = 98.000000
array2[1] = 99.000000
array2[2] = 100.000000
、((メインの外))、
> displayArray=Module.cwrap('displayArray', '[number]', ['[number]'])
> result = displayArray([1.0,2.0,3.0])
[1, 2, 3]
> result
[1, 2, 3]
Iが生成され、次のを見ています/私が見たいものではないブラウザに表示されます。私は、次の質問を持っている
doubleVector[0] = 0.000000
doubleVector[1] = 0.000000
doubleVector[2] = 0.000000
modified doubleVector[0] = 100.000000
modified doubleVector[1] = 100.000000
modified doubleVector[2] = 100.000000
は:
私はModule.cwrapに私の呼び出しで正しいをリスト戻り値の型およびパラメータ()の正しい構文を持っていますか?私はint_sqrt()ルーチンにポインタ以外の変数を渡すことを扱うチュートリアルの "コードとのやりとり"のセクションで、int_sqrt()のシンプルで簡単な例をうまく実行しました。
emscriptenで生成されたjavascriptコードに配列やポインタが渡された(または返された)ときに、何か違うことがありますか?
displayArray()関数のブラウザで生成された出力は、main()から呼び出されたときに期待どおりに動作します。しかし、javascriptコンソール経由ではありませんか?
私はEmscripten/javascriptを新規に使用しています。情報/サポートは非常に高く評価されます。
はありがとう、
FC
非常に役に立っ答えを。時間を節約して髪を引っ張ってくれます。ありがとうございました。 – scai
本当に助けになりましたが、「他の方法」はどうですか?どのようにあなたはCコードから配列を変更し、Javascriptで使用できますか? – gromit190
'Module.malloc()'は見えますが、 'Module.free()'はありません。それはJSのGCによって処理されますか? – Nikkolasg