Thanks! That's helpful.  The structures are generally simple, just 
several integers or floats, so this approach should work.
Blake

Hannu Rummukainen wrote:
> On Sun, 6 Jun 2004, blake wrote:
> 
> 
>>In looking at the CMUCL ffi manual, it explicitly says that structures
>>can't be passed by value.  Is there some other way to call the Intel
>>functions which require such structues by value?  For example, is this
>>possible using UFFI?
> 
> 
> On the binary level structures are passed on the stack pretty much like
> any other argument, so you should be able to lie to the CMUCL FFI about
> the actual argument types, and arrange the call so that the library
> function gets the correct arguments.  The only problem is alignment: all
> non-structure arguments including chars and shorts are aligned to 4 or 8
> bytes, while chars and shorts inside structures are packed more tightly.
> 
> If you have a structure that consists of ints, floats and doubles, perhaps
> with the occasional char or short in between, you should be able to get
> away with simply passing each structure element in a consecutive function
> argument.
> 
> If the structure contains several consecutive chars and/or shorts, you
> will have to pack them into int arguments to get them passed properly to
> the library function.  One way to do the packing would be to fill the
> appropriate C structure in lisp, and then use low-level lisp functions to
> read ints directly from the memory area of the structure.
> 
> With best regards,
> Hannu Rummukainen
> 
> 


Reply via email to