0
私がwasmにコンパイルしたC++関数にユーザーが送信したデータを渡すことを検討しています。最後にフロントエンドからwebassemblyにクライアントファイルを渡す
handleFile(e){
const file = e.currentTarget.files[0];
const reader = new FileReader();
reader.onloadend = evt => {
window.Module.readFile(evt.target.result);
}
reader.readAsArrayBuffer(file);
}
含む.cppファイル:
<input type="file" onChange={this.handleFile.bind(this)} />
のonChangeコールバックは現在、次のようになります。データには、同様に、ユーザは、入力タグを介してフロントエンドに提出するファイルでありますreadFileの機能は次のようになります。私は私がヒープ上にこれらのファイルのメモリを割り当て、その後にJSからPTRを渡すようになってることを知ってるよう
void readFile(const std::string & rawString){
std::vector<uint8_t> data(rawString.begin(), rawString.end());
//...
}
EMSCRIPTEN_BINDINGS(my_module) {
emscripten::function("readFile", &readFile);
}
私は、様々なドキュメントを読んで、私の午後を過ごすましたすべてのデータを渡す代わりにreadFileを使用します。私の問題は、そのすべてがどのように動作するはずか分かりません。誰かが説明できますか?
の可能性の重複[WebAssembly関数からJavaScript文字列を返すにはどうすればいいですか?](https:// stackov erflow.com/questions/41353389/how-can-i-return-a-javascript-string-from-a-webassembly-function)。この他の質問で私が提供した答えは、WebAssemblyに文字列を入力/出力する方法を示しています。 –
@JFBastienわかりません。私はwasm昨日 - > https://developer.mozilla.org/en-US/docs/WebAssembly/C_to_wasmを開始するためにこれらの指示に従ってきました。 .cppファイルをコンパイルすると、
Emscriptenでは、WASM用の仮想ファイルシステムを使用できます。 まず、
-s FORCE_FILESYSTEM=1
オプションを使用してC/C++コードをコンパイルします。 C/C++の中では、標準のライブラリ関数を使用して、通常どおりファイルを操作します。 HTMLページには、input type=file
要素があります。入力要素からファイルを取得し、WASMにそれを渡すためのサンプルJSコード:
リンク:
出典
2017-11-21 20:22:09 nzeemin