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.

Reply via email to