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.

Reply via email to