如何将回调传递给 EM_ASM for C++?

奥列格·普里瓦洛夫

我不知道如何将值异步传递给 EM_ASM,这是我尝试这样做的方法(但 JS 说它不是函数):

const auto testFunc = [] (const char* data)
{
    printf("data: %s\n", data);
}
EM_ASM_(
{
    var funcResult = ($0);
    var text = "data";
    var lengthBytes = lengthBytesUTF8(text) + 1;
    var stringOnWasmHeap = _malloc(lengthBytes);
    stringToUTF8(text, stringOnWasmHeap, lengthBytes);
    // exception thrown: TypeError: funcResult is not a function
    funcResult(stringOnWasmHeap);
}, testFunc);

文档说您可以使用 em_str_callback_func 类型的函数 (em_str_callback_func)。但它没有说如何使用它。https://emscripten.org/docs/api_reference/emscripten.h.html

好奇丹尼

我不知道传递回调,但如果你想做的是从 JS 返回一个值,那么文档有这样一个例子:你必须使用EM_ASM_INT

int x = EM_ASM_INT({
  console.log('I received: ' + $0);
  return $0 + 1;
}, 100);
printf("%d\n", x);

API参考拥有返回字符串另一个例子:

char *str = (char*)EM_ASM_INT({
  var jsString = 'Hello with some exotic Unicode characters: Tässä on yksi lumiukko: ☃, ole hyvä.';
  var lengthBytes = lengthBytesUTF8(jsString)+1;
  // 'jsString.length' would return the length of the string as UTF-16
  // units, but Emscripten C strings operate as UTF-8.
  var stringOnWasmHeap = _malloc(lengthBytes);
  stringToUTF8(jsString, stringOnWasmHeap, lengthBytes);
  return stringOnWasmHeap;
});
printf("UTF8 string says: %s\n", str);
free(str); // Each call to _malloc() must be paired with free(), or heap memory will leak!

一旦你在 C 中获得了值,你就可以直接调用你的testfunc

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

如何将回调函数从C ++传递给Objective-C

在 C++/CLI 中将回调函数传递给线程

Scala-如何将回调传递给方法

如何将回调函数传递给子组件?

如何将回调函数传递给父级

如何将回调函数传递给返回多行的aggregate()?

如何将回调传递给孩子而不触发它

如何将带有回调的Objective-C传递给Swift方法?

如何将回调传递给传递给“ vo”库的生成器?

如何正确地将回调从C#传递到C?

如何将回调作为变量传递给预定义的回调

将回调参数从C#传递到非托管C ++

我如何将回调结果传递给变量并自由访问var

React.js如何将回调传递给子组件?

如何将回调作为参数传递给另一个函数

使用Context.actorOf时如何将回调函数传递给akka actor构造函数?

在决定如何将回调传递给addEventListener时应该考虑什么?

如何将C ++类函数作为回调传递

如何将回调从活动传递到片段

如何将回调函数从Java传递到Kotlin类

如何将回调从 TableView 传递到 TableView Cell?

从 python 如何将在 sys.settrace 回调中接收到的帧对象传递给采用 void * 的 C++ 函数

将回调函数传递给指令

是否可以将回调传递给Webworker?

将回调传递给 DropdownButton onChanged 属性

将回调传递给 tokio 任务

将回调传递给事件处理程序

如何使用C / C ++本机结构传递给C#代码中的回调