Hello Brion, Thank you for your answer. I've changed a bit my example (now noExitRuntime=true and callback is global) but it still doesn't work. My callback dies before async call (and I don't get how to keep it alive). You can find my code here <https://github.com/AndriiHeonia/async-emcc/tree/7207aebdcc65b5d183f1a26516ccdd77eb06ce8e>. What I'm doing wrong?
Thanks in advance! On Friday, March 4, 2016 at 7:45:15 PM UTC+1, Brion Vibber wrote: > > Two things: > > First, you need to make sure the C runtime doesn't shut down when main() > exits -- see > https://kripken.github.io/emscripten-site/docs/api_reference/module.html#Module.noExitRuntime > > Second, you need to make sure your object doesn't go out of scope and get > deleted at the end of the main() function. You'll have to store it in a > global variable or something. > > -- brion > > On Fri, Mar 4, 2016 at 9:57 AM, Andrii Heonia <[email protected] > <javascript:>> wrote: > >> How can I call C++ callback asynchronously from JavaScript? >> >> >> This is my JS code: >> >> >> <script type="text/javascript"> >> function sendRequest(callback) { >> setTimeout(function(){ >> callback["sayHi"](); >> }, 100); >> } >> </script> >> >> >> This is my C++ code: >> >> >> #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; >> } >> >> >> When I execute this code in browser it fails with error: >> >> Uncaught BindingError: Cannot pass deleted object as a pointer of type >> MyClass* >> >> >> I use emcc 1.35.22 and compile it with this command: >> >> ~/app/emsdk_portable/emscripten/tag-1.35.22/emcc main.cpp --bind -o out. >> js >> >> >> Thank you in advance! >> >> -- >> You received this message because you are subscribed to the Google Groups >> "emscripten-discuss" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
