繁体   English   中英

如何将字符串作为 c++(webassembly)function 中的文件作为 javascript 的参数发送?

[英]how to send string as file in c++ (webassembly) function as argument from javascript?

我在 c++ 中有一个 function,它将文件作为主要 function 中的参数。

int main(int argc, char **argv) {
    if (argc > 1) {
        auto len = std::strlen(argv[1]);
        if (len >= 4 && argv[1][len-1] == 'c' && argv[1][len-2] == 'n' && argv[1][len-3] == '.') {
            read_file(argv[1]);
            save_all_lines();

        } else {
            std::fprintf(stderr, "ncc: " BOLD_RED "error" NORMAL ": unknown file format. Only files with extension 'nc' are supported\n");
            return EXIT_FAILURE;
        }
    } else {
        std::fprintf(stderr, "usage: ncc FILE\n");
        return EXIT_FAILURE;
    }

}

我已经将这个 c++ 程序编译成 webassembly。 我想在浏览器文本区域中键入一个字符串,该字符串将作为参数发送到主 function。

我已将字符串转换为 blob(),然后将 blob object 转换为文件,但我应该如何在 webassembly function 中发送文件。

#EXAMPLE IMPLEMENTATION
            var contents = `
                func main(){
                    print("hello");
                }
            `;
            var blob = new Blob([contents], { type: "text/plain" });
            var file = new File([blob], "test.nc", { type: "text/plain" });
    
            var data = new Uint8Array(file);
    
            Module._main(2, data);

如果您使用的是 Emscripten,则需要在 JS 端使用FS.mount方法将您的File object“挂载”到模拟文件系统中。

例如,假设默认的MEMFS文件系统仿真类型(所有内容都在内存中),示例如下所示:

FS.mount(MEMFS, { files: [file /* this is your File object */] }, '/');

然后,您可以在相应文件名下的 C++ 侧访问此文件,例如在您的情况下/test.nc

查看链接的文档以获取更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM