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.
