Are you sure this would meet my use case? My use case is not to use a C++ class from JavaScript, but rather to mimic it, for the benefit of the ported code. Like how SDL is emulated by Emscripten for instance.
Arve On Sep 12, 2014 5:38 PM, "Chad Austin" <[email protected]> wrote: > Hi Arve, > > If you have a C++ class and you want to make it accessible to JavaScript, > you probably want to use Embind or WebIDL. There is an introduction to > Embind at > http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/embind.html > > You may also get some value out of the information in these slides, though > it probably goes deeper than you are thinking about at the moment: > http://chadaustin.me/2014/09/connecting-c-and-javascript-on-the-web-with-embind/ > > Let me know if you have any questions, > Chad > > (I don't have any personal experience with WebIDL, but it probably also > solves your use case.) > > > On Thu, Sep 11, 2014 at 9:20 PM, Arve Knudsen <[email protected]> > wrote: > >> Gotcha, thanks. >> On Sep 12, 2014 12:55 PM, "Bruce Mitchener" <[email protected]> >> wrote: >> >>> Needs to be C for the JS library stuff to work. >>> >>> - Bruce >>> >>> >>> On Fri, Sep 12, 2014 at 10:09 AM, Arve Knudsen <[email protected]> >>> wrote: >>> >>>> Bruce, can you comment on the C++ thing though? Could I write this JS >>>> implementation for a C++ class instead, or does it have to be C? >>>> >>>> Arve >>>> >>>> On Fri, Sep 12, 2014 at 12:08 PM, Arve Knudsen <[email protected]> >>>> wrote: >>>> >>>>> Bruce, ahhh thank you, that was the missing piece of the puzzle. It >>>>> works now! >>>>> >>>>> Arve >>>>> >>>>> On Fri, Sep 12, 2014 at 12:05 PM, Bruce Mitchener < >>>>> [email protected]> wrote: >>>>> >>>>>> You don't want to put your function inside the $RTAUDIO object. >>>>>> >>>>>> You'd just put it at top level in the LibraryRtAudio object. $RTAUDIO >>>>>> is where you'll put shared internal stuff. >>>>>> >>>>>> - Bruce >>>>>> >>>>>> >>>>>> On Fri, Sep 12, 2014 at 9:58 AM, Arve Knudsen <[email protected] >>>>>> > wrote: >>>>>> >>>>>>> I need to write a shim for the C++ API RtAudio, i.e. the class >>>>>>> RtAudio really. Your docs show how to write shims for C APIs (e.g. SDL), >>>>>>> but not C++ APIs: >>>>>>> http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html?highlight=webidl#implement-a-c-api-in-javascript. >>>>>>> No idea how embind/webidl-binder would fit into this scenario. >>>>>>> >>>>>>> Anyhow, I wrote a (very) simple C wrapper for RtAudio, thus >>>>>>> sidestepping the C++ issue, so I can just write a C API shim. I try to >>>>>>> implement a single C function, rtaudio_initialize, in JavaScript, but >>>>>>> it's >>>>>>> not found by the generated JavaScript (chuck.js). I can tell that the >>>>>>> shim >>>>>>> (or JavaScript library) is used when building however, since I can have >>>>>>> it >>>>>>> break the build by throwing an exception. Why is my JS implementation of >>>>>>> rtaudio_initialize not found?? >>>>>>> >>>>>>> My shim can be seen here: >>>>>>> https://github.com/aknuds1/chuck/blob/emscripten/src/emscripten/shims/rtaudio.js, >>>>>>> and it's incorporated in the build via the --js-library option to >>>>>>> emcc: --js-library emscripten/shims/rtaudio.js. >>>>>>> >>>>>>> Thanks, >>>>>>> Arve >>>>>>> >>>>>>> On Fri, Sep 12, 2014 at 11:31 AM, Alon Zakai <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> What do you mean by "shim a C++ API"? And in what way are embind >>>>>>>> and the webidl-binder not sufficient? >>>>>>>> >>>>>>>> - Alon >>>>>>>> >>>>>>>> >>>>>>>> On Thu, Sep 11, 2014 at 7:29 PM, Arve Knudsen < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> I can't see that those docs mention how to shim a C++ API in >>>>>>>>> JavaScript? There is a section on C API though, and how to integrate >>>>>>>>> your >>>>>>>>> shims, so that's helpful at least. Is it simply not possible to shim >>>>>>>>> a C++ >>>>>>>>> API? If so, I'll have to write a C wrapper instead I guess. >>>>>>>>> >>>>>>>>> Arve >>>>>>>>> >>>>>>>>> >>>>>>>>> On Fri, Sep 12, 2014 at 11:17 AM, Alon Zakai <[email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> General docs on that are at >>>>>>>>>> http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html?highlight=webidl >>>>>>>>>> >>>>>>>>>> In particular if you are going to use C++ classes from JS, you >>>>>>>>>> probably want embind or webidl-binder. >>>>>>>>>> >>>>>>>>>> - Alon >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Thu, Sep 11, 2014 at 7:02 PM, Arve Knudsen < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> Hi guys >>>>>>>>>>> >>>>>>>>>>> As pertaining my previous more general question about writing >>>>>>>>>>> Emscripten shims, I have a more specific follow-up question. How >>>>>>>>>>> can I >>>>>>>>>>> write an Emscripten shim library to mimic the RtAudio C++ class >>>>>>>>>>> constructor >>>>>>>>>>> ( >>>>>>>>>>> http://www.music.mcgill.ca/~gary/rtaudio/classRtAudio.html#afd0bfa26deae9804e18faff59d0273d9)? >>>>>>>>>>> And how do I integrate said shim into my build, so that invoking the >>>>>>>>>>> constructor works? The shim will eventually need to do more than >>>>>>>>>>> just mimic >>>>>>>>>>> the constructor of course, but that would be a superb start. >>>>>>>>>>> >>>>>>>>>>> For context, what I'm trying to do is to port the ChucK music >>>>>>>>>>> programming language to JS, my GitHub project can be found here >>>>>>>>>>> (branch >>>>>>>>>>> emscripten): https://github.com/aknuds1/chuck/tree/emscripten. >>>>>>>>>>> The README includes instructions on how to build with Emscripten. >>>>>>>>>>> >>>>>>>>>>> Let me know if you need to know more. >>>>>>>>>>> >>>>>>>>>>> Best, >>>>>>>>>>> Arve >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> 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. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> 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. >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> 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. >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> 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. >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> 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. >>>>>>> >>>>>> >>>>>> -- >>>>>> 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. >>>>>> >>>>> >>>>> >>>> -- >>>> 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. >>>> >>> >>> -- >>> 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. >>> >> -- >> 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. >> > > > > -- > Chad Austin > Technical Director, IMVU > http://engineering.imvu.com <http://www.imvu.com/members/Chad/> > http://chadaustin.me > > > -- > 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. > -- 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.
