Brion, 

thanks for answering so promptly. I have been working with your code 
snipped, and something 
is not working as anticipated. The length does return the right value ( if 
I change from u32 (which is undefined apparently) to i8). 
However, the arrayPointer does not act as an array, i.e. 
arrayPointer.length is undefined. I've tried
to display arrayPointer[0], but it's garbage. Do I need to create an array 
dynamically (like 
new Float32Array, and make it point to the pArrayPointer?)

Thanks for any pointers, 

Eric L.



On Tuesday, November 3, 2015 at 4:59:17 PM UTC-8, Brion Vibber wrote:
>
> When passing pointers into a C function, remember they have to point to a 
> place in the emscripten heap. This means you'll need to allocate some space 
> on the emscripten heap for your pointer and your integer, then pass the 
> pointers to *that* pointer and that integer into the function... then 
> extract the final values back out of the heap.
>
> Something like:
>
> var pArrayPointer = Module._malloc(8); // room for 2 pointers
> var pLength = pArrayPointer + 4;
> AllocateArray(pArrayPointer, pLength);
> var arrayPointer = Module.getValue(pArrayPointer, 'u32');
> var length = Module.getValue(pLength, 'u32');
> Module._free(pArrayPointer); // free your temp vars
>
> I would recommend wrapping all that into a function that exposes a more 
> JS-friendly interface (such as returning a Float32Array as a single return 
> value).
>
> -- brion
>
> On Tue, Nov 3, 2015 at 4:27 PM, larour <[email protected] <javascript:>> 
> wrote:
>
>> Dear All, 
>>
>> I have an issue that I can't seem to see addressed fully, apologies in 
>> advance if this has already been posted. 
>> Here is the issue: 
>>
>> given a C function that I compile with emcc:    
>>
>> int allocatearray(float** array,int* parray_size){
>>
>> array_size=rand(10); 
>>  float* array= (float*) malloc(array_size); 
>> *parray_size=array_size;
>> *parray=array; 
>> }
>>
>>
>> this function allocates an array for which I do not initially know the 
>> size, hence cannot be done on the 
>> js side, only the c side  knows how to handle the allocation. 
>>
>> I would like to be able to create a js array that is allocated insize the 
>> "c" function allocatearray: 
>>
>> i.e: I would like to write the following code: 
>>
>> var allocated_array;
>> var allocated_array_size;  
>> AllocateArray = 
>> Module.cwrap('allocate_array','number',['number','number']);
>>
>> but I don't seem to understand how using the module heap I could retrieve 
>> the allocated_array 
>> and its size, how would the call even look like? 
>> AllocateArray(&allocate_array, & allocated_array_size); ? //that's not 
>> javascript! but that's what I would like to write
>>
>> I could try and build a pointer in the module heap, and pass that on to 
>> the AllocateArray module, but I need to pass 
>> a pointer to a pointer if I want to be able to allocate it. How do you 
>> create a NULL pointer in javascript, and get 
>> it allocated within the c function? 
>>
>> I have seen a lot of documentation on how to pass a pointer from js to C, 
>> but here, it's different, I want to pass 
>> a NULL pointer from js to C, have C allocate it, and return it to js. 
>>
>> I would appreciate any help on the issue, thanks a lot in advance!
>>
>> Eric
>>
>>
>> -- 
>> 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] <javascript:>.
>> 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