[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: modules
- From: oti@...
- Date: Tue, 27 Feb 2001 22:48:12 -0000
--- In lua-l@y..., "Chris Tavares" <ctavares@d...> wrote:
> Well, the problem is that you MUST use assembly to do this sort of
thing -
> higher level languages don't give you enough control over the stack
and
> registers to have any hope of setting up a call properly.
I once wrote a FFI for Tinyscheme that basically went like this:
1. Allocate a char buffer -- arg_buf[256], say.
2. Copy the arguments into this buffer, allowing for word-alignment.
For instance for foreign function foo(int a, float b) do a memcpy
(arg_buf, &a, sizeof(int)) followed by a memcpy(arg_buf + sizeof
(int), &b, sizeof(float)).
3. Get the function pointer to foo and call int result = foo(arg_buf).
Amazingly enough it worked in all cases I bothered to test. I still
have the source code lying around, and can post it if anyone's
interested, but the underlying idea's pretty simple.
-- Elliott