Adding an assert and a typed array test in
https://github.com/kripken/emscripten/pull/4797

As for the docs, they say

> use ``"number"`` for any C pointer, and ``"array"`` for JavaScript arrays
and typed arrays; note that arrays are 8-bit

is that not clear enough?

On Wed, Dec 14, 2016 at 8:14 AM, Floh <[email protected]> wrote:

> ...and 1 minute later I found the problem by mulling over the ccall source
> in preamble.js :D
>
> The problem is that I'm passing a raw ArrayBuffer object, when ccall
> expects an Uint8Array. ArrayBuffer has no .length property, which is
> expected by ccall.
>
> So the JS side needs to look something like this:
>
> var content = new Uint8Array(loadEvent.target.result);
> Module.ccall('emsc_pass_data',
>     null,
>     ['string', 'array', 'number'],
>     [file.name, content, content.length]);
>
> ...some more examples in the docs and probably a test for ccall with
> 'array' would be nice though ;)
>
> Cheers,
> -Floh.
>
> Am Mittwoch, 14. Dezember 2016 17:01:45 UTC+1 schrieb Floh:
>>
>> Hi,
>>
>> I can't seem to find example code of how to pass an ArrayBuffer from JS
>> to C via ccall() (for instance, there doesn't seem to be a test for this in
>> the SDK?), and I have problems doing this (the passed data is broken). I'm
>> sure it's something simple...
>>
>> Background: I want to pass file content data from a JS drag-n-drop event
>> handler to the C side.
>>
>> What I have on the JS side:
>>
>>
> ...
>> // this is the array buffer as result of a FileReader, this contains the
>> // expected data (I checked through logging the first couple of bytes to
>> the console)
>> var content = loadEvent.target.result;
>>
>> // now the ccall to a C function "emsc_pass_data" with 3 params, a string
>> name, the content, and the length
>> Module.ccall('emsc_pass_data',
>>     null,
>>     ['string', 'array', 'number'],
>>     [file.name, content, content.byteLength]);
>> ...
>>
>> ...and on the C side I have:
>>
>> void emsc_pass_data(const char* name, const uint8_t* data, int size) {
>>
>> }
>>
>> The function is called, name has a valid string, size is also right, data
>> is some pointer, but the pointed-to data behind the pointers doesn't match
>> the ArrayBuffer content (it looks fairly random with lots of zeros).
>>
>> What am I doing wrong? I would most appreciate some code example to look
>> at :)
>>
>> PS: the emscripten documentation on ccall is a bit hand-wavy on the array
>> type, a small code example there would be very helpful (both the JS and C
>> side), see here: https://kripken.github.io/emscripten-site/docs/api_ref
>> erence/preamble.js.html#calling-compiled-c-functions-from-javascript
>>
>> Cheers,
>> -Floh.
>>
> --
> 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.

Reply via email to