2017-06-08 4 views
2

からJavaScriptのインポートオブジェクトのエントリを取得私はインスタンス化機能を有効importObjectを提供することができますので、それはwasmファイルにコンパイルされたときに錆プログラムが実際にエクスポートするかを理解したい:WebAssembly .wasmモジュール

WebAssembly.instantiate(bufferSource, importObject); 

私が理解する限り、これを行う唯一の方法は、コンパイルされたコードのファイルのようなs-syntaxをエクスポートすることです。私はドキュメントやWeb検索でこれを行う方法を見つけることができません。

答えて

3

wabtwasm2wastなどのツールを使用して、.wasmファイルを.wastに変換することができます。それはあなたが求めていることをするでしょう。

ただし、必ずしもこれを行う必要はありません! JavaScriptのAPIは、あなたが何をしたいの最もを与える:テーブルおよびメモリの初期/最大値は、現在推測されていることを

let arrayBuffer = ...; // Somehow get your .wasm file into an ArrayBuffer. XHR, from a string, or what have you. 
let module = WebAssembly.Module(arrayBuffer); // This is the synchronous API! Only use it for testing/offline things. 

let importObject = {}; 
for (let imp of WebAssembly.Module.imports(module)) { 
    if (typeof importObject[imp.module] === "undefined") 
     importObject[imp.module] = {}; 
    switch (imp.kind) { 
    case "function": importObject[imp.module][imp.name] =() => {}; break; 
    case "table": importObject[imp.module][imp.name] = new WebAssembly.Table({ initial: ???, maximum: ???, element: "anyfunc" }); break; 
    case "memory": importObject[imp.module][imp.name] = new WebAssembly.Memory({ initial: ??? }); break; 
    case "global": importObject[imp.module][imp.name] = 0; break; 
    } 
} 

注意を!私はadd the missing information to the JS APIを提案しています。次のWebAssemblyミーティングでは、このような追加について議論する良い時期になると思います。

+1

すてきなアプローチ。あなたがそれをすることができるとは思わなかった。ありがとう! –

+0

私が提出したバグによれば、それはまだ少し欠けている! JavaScript APIに余分なものが見つからない場合は、usecaseを文書化したバグを報告してください。創造的であると感じたら、あなたがしようとしていることを修正するためのAPIを提案してください。人々がWebAssemblyを使用し始めると、後で見落としたりパントしたものが見つかることが予想されます。 –

関連する問題