Thank you! That works like a charm. What about the proper cleaning of the object? Will it be taken care of by some garbage collector in the browser?
Jendker W dniu środa, 12 września 2018 18:16:43 UTC+2 użytkownik Brion Vibber napisał: > > On Wed, Sep 12, 2018 at 7:46 AM Jendker <[email protected] <javascript:>> > wrote: > >> I am writing an application, where I would need to call the functions of >> the object existing in C++ from JavaScript, but for now I did not find any >> reasonable solution reading Embind documentation. >> I know, that it would be possible to create object in JavaScript and call >> each function from JavaScript, but I would like to avoid it, just keep the >> bulk of code in C++. >> >> Is there any way to create object in C++ and access it from JavaScript, >> or create object in JavaScript and access it from C++? (both would be fine) >> I could just create object as global variable in C++ and call it every >> time from the JavaScript binded function, which would be accessable, but >> that would be far from clean design... >> > > You can't directly access C++ global variables via embind, but you can > export a function which will return the variable (this is known as the > "singleton pattern") and export that to JavaScript. You need to also bind > the class, or else embind won't know how to expose the instance methods etc. > > Something like this ought to work: > > class MyClass { > ... > public: > void doSomething(); > } > > static MyClass* singleton_val; > > MyClass* singleton() { > if (singleton_val == NULL) { > singleton_val = new MyClass; > } > return singleton_val; > } > > EMSCRIPTEN_BINDINGS(my_module) { > class_<MyClass>("MyClass") > ... bindings for class ...; > function("singleton", &singleton, allow_raw_pointers()); > } > > (Or set the value from your main() and ensure it gets called before use.) > > > Then from the JS side you'd call it like: > > Module.singleton().doSomething(); > > -- brion > -- 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.
