如何从 emscripten/web assembly 函数返回字符串给 ac 调用者

Car*_*ara 5 emscripten webassembly

尝试遵循 emscripten 教程,在对 emscripten 的 C 调用之间传递参数,但仅正确传递数字,而不传递字符串。如何从 js 库调用将字符串返回到 C?

测试.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <emscripten.h>
extern char *getText(void);

int main() {
    printf(getText());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

mylib.js:

mergeInto(LibraryManager.library, {
    getText: function() {
        return "a test string";
    }
});
Run Code Online (Sandbox Code Playgroud)

构建命令:

emcc test.c -o test.html --js-library mylib.js
Run Code Online (Sandbox Code Playgroud)

我期望看到的输出是“测试字符串”,但我实际看到的是“emcc”

我在 stackoverflow 和其他地方进行了广泛的查找,但是我找不到任何关于将字符串值从 JS 返回到 C 的信息,只能找到将它们从 C 传递到 JS 的信息,所以这不是我能找到的任何其他问题的重复。

是什么赋予了?

小智 0

这可能不是 OP 正在寻找的答案,但是您是否考虑过将公开的函数包装在 C++ 中来规避该问题?const char*需要一些智能包装才能完美地处理 JS 字符串。如果您将这些函数包装在 C++ 中并返回,std::string则优点可能大于缺点。