2009-11-16 25 views
7

Geçenlerde Lisp'i öğrenmeye başladı ve GTK arayüzü kullanan bir program yazmak istemişimdir. Ben (CMUCL üzerine) lambda-gtk bağlamaları monte ettik. Bir pixbuf üzerinde putpixel/GetPixel yeteneğine sahip istiyorum. Ancak erişim belleğini yönetemediğimi fark ettim.İşaretçiler?

Fonksiyon (GDK: pixbuf-get-piksel pixbuf) (nasıl ya da sadece bilmiyorum) Bana bir numara verir - bellek addr, sanırım. C++ 'da ihtiyacım olan piksele kolayca ulaşabilirim. Kendi putpromu Lisp'e yazmanın bir yolu var mı? Lisp, C kütüphanelerine erişmek için ve doğrudan bellek erişimi yapmak, modern ve taşınabilir şekilde

cevap

7

CFFI olduğunu.

Böyle kullanabilirsiniz:

>(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) 
İlgili konular