2009-11-16 14 views
7

Empecé a aprender Lisp recientemente y quería escribir un programa que utilizara la interfaz gtk. He instalado enlaces lambda-gtk (en CMUCL). Quiero tener la habilidad putpixel/getpixel en un pixbuf. Pero descubrí que no puedo dirigir la memoria de acceso. (o simplemente no sé cómo)Punteros en Lisp?

Función (gdk: pixbuf-get-pixels pixbuf) me devuelve un número - addr de memoria, supongo. En C++ puedo acceder fácilmente al píxel que necesito. ¿Hay alguna forma de escribir mi propio píxel en Lisp?

Respuesta

7

En Lisp, la forma moderna y portátil de acceder a las bibliotecas C y acceder a la memoria directa es CFFI.

Se puede utilizar la siguiente manera:

>(defparameter *p* (cffi:foreign-alloc :unsigned-char :count 10)) 
;; allocate 10 bytes 
*P* 
> (setf (cffi:mem-aref *p* :unsigned-char 0) 10) 
;; access *p* as an array of bytes and set its 0th element to 10 
10 
> (cffi:mem-aref *p* :unsigned-char 0) 
;; access *p* as an array of bytes and take its 0th element 
10 
> (cffi:make-pointer 123) 
;; make a pointer that points to given address 
#.(SB-SYS:INT-SAP #X0000007B)