У меня есть небольшой вопрос о Emscripten. Как я могу вызвать обратный вызов C++ асинхронно с JavaScript?Вызов функции C++ из JavaScript асинхронно с использованием Emscripten
Это мой JS код:
<script type="text/javascript">
function sendRequest(callback) {
setTimeout(function(){
callback["sayHi"]();
}, 100);
}
</script>
Это мой C++ код:
#include <emscripten/emscripten.h>
#include <emscripten/bind.h>
using namespace emscripten;
class MyClass {
public:
void sayHi() {
printf("Hello! \n");
};
};
EMSCRIPTEN_BINDINGS(MyClass)
{
class_<MyClass>("MyClass")
.function("sayHi", &MyClass::sayHi);
}
int main() {
val window = val::global("window");
auto myObj = MyClass();
window.call<void>("sendRequest", myObj);
return 0;
}
Когда я выполняю этот код он терпит неудачу с ошибкой:
Uncaught BindingError: Cannot pass deleted object as a pointer of type MyClass*
я использую EMCC 1.35.22 и скомпилировать его с помощью этой команды:
~/app/emsdk_portable/emscripten/tag-1.35.22/emcc main.cpp --bind -o out.js
ли работа, если код не является асинхронным? – Louis
Да, если я вызываю callback ["sayHi"](); перед setTimeout он работает. – AndriiHeonia