将文件名传递给 Emscripten 生成的 js 作为参数

Posted

技术标签:

【中文标题】将文件名传递给 Emscripten 生成的 js 作为参数【英文标题】:Passing in a file name to Emscripten generated js as an argument 【发布时间】:2020-12-24 23:19:18 【问题描述】:

我通过 ecc 从 C 移植到 WebAssembly 的程序在通过 emscripten 生成的 html 文件运行时似乎“工作”(当没有传递参数时它会显示帮助页面)。但是,要使用该程序,它需要传入一些参数。

示例: exampleprogram -option filename

本质上,我希望为用户提供一种从桌面选择文件并将其作为参数传递给程序的方法,然后单击另一个按钮来运行程序。这将全部在本地运行,因为要选择的文件存在一些版权问题。 我对 html css 和 js 还很陌生,到目前为止我所做的最多的是为页面创建了基本布局并附加了生成的 js 文件

【问题讨论】:

【参考方案1】:

要使用命令行参数运行 emscripten 构建的程序,您需要先设置 Module['arguments'],然后再加载模块的 js 文件。

但是,将文件从用户的文件系统中获取到浏览器中以便 emscripten 可以处理它是一个更复杂的问题。有关如何执行该部分的信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications。

获得文件后,您需要将其注入到模块的虚拟文件系统中。有关这方面的更多信息,请参阅:https://emscripten.org/docs/api_reference/Filesystem-API.html

【讨论】:

以上是关于将文件名传递给 Emscripten 生成的 js 作为参数的主要内容,如果未能解决你的问题,请参考以下文章

将 JS 数字数组传递给 emscripten C++ 而无需 reinterpret_cast

Emscripten将uint8_t数组传递给javascript?

Emscripten malloc 和跨 JS 和 C++ 的免费

Emscripten: emmake 生成 .js 文件

使用 emscripten 将数组传递给 C 函数

将 C/C++ 套接字传递给 EM_ASM 以在 Emscripten 中用作 websocket