Hello Omar,

The problem with your code is that wait-for-a-while must be declared as
an external function; like so:

(define-external
  (wait_for_a_while ((c-pointer uv-idle-t) handle))
  void
  (let lp ((counter 0))
    (if (>= counter 10000000)
        (uv-idle-stop handle)
        (lp (+ counter 1)))))

note that the name of the function must be a valid C function name, so
it cannot be dash-seperated. Also looking at the libub documentation,
the callback did not have a status argument.

An external function that is going to call such a callback function must
be declared using 'foreign-safe-lambda' instead of
'foreign-lambda'. Thus uv-run must be declared as such:

(define uv-run
  (foreign-safe-lambda int "uv_run" (c-pointer uv-loop-t) int))

Hope this helps and good luck,
Richard


[email protected] writes:

> Hello,
>
> I need some help getting started with ffi. 
>
> I am attempting to bind libuv to scheme code.
>
> My chicken scheme code at http://pastebin.com/bwja0yet fails with the
> following error.
>
> The following code fails with the following:
>
> Error: bad argument count - received 152135942 but expected 2: 0
>
>       Call history:
>
>       uv.scm:33: uv-default-loop        
>       uv.scm:33: uv-idle-init   
>       uv.scm:34: uv-idle-start          
>       uv.scm:36: uv-default-loop        
>       uv.scm:36: uv-run               <--
>
>
> I am attempting to port the following C code.
>
> http://pastebin.com/63gP8HFT
>
> - Omar
>
> _______________________________________________
> Chicken-users mailing list
> [email protected]
> https://lists.nongnu.org/mailman/listinfo/chicken-users

-- 

_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to