wasm w/emcc
にコンパイルし、Webブラウザで実行するための小さなCプログラムを作成しています。 wasmエクスポートされた関数はパラメータの入力と戻り値として単純な数値のみを受け入れることができるので、文字列やchar
配列などのより複雑なデータ型にアクセスするにはJavaScript APIとコンパイル済みWebAssemblyコードの間でメモリを共有する必要があります。問題は、私の人生のために私のCプログラムの内部からWebAssembly linear memoryにアクセスする方法を理解できないということです。C/C++からWebAssemblyリニアメモリにアクセスする方法
究極の目標は、私のCプログラムの中でJavaScriptで初期化された文字列を読み込み、さらにC言語のプログラムで修正または初期化された文字列をWebブラウザのJavaScriptコードで読み込むことです。ここで
は、私が何をしようとしているの基本的な例です。
main.js
const importObject = {
'env': {
'memoryBase': 0,
'tableBase': 0,
'memory': new WebAssembly.Memory({initial: 256}),
'table': new WebAssembly.Table({initial: 0, element: 'anyfunc'})
}
}
// using the fetchAndInstantiate util function from
// https://github.com/mdn/webassembly-examples/blob/master/wasm-utils.js
fetchAndInstantiate('example.wasm', importObject).then(instance => {
// call the compiled webassembly main function
instance.exports._main()
console.log(importObject.env.memory)
})
はexample.c
int main() {
// somehow access importObject.env.memory
// so that I can write a string to it
return 0;
}
This questionは私の道の一部を取得しますしかし、私はまだ私のCコードでWebAssemblyメモリバッファから読み書きする方法を理解していません。