2009-11-16 13 views
7

私は最近Lispを学び始めて、gtkインターフェイスを使ったプログラムを書こうと思っていました。私はlambda-gtkバインディング(CMUCL上)をインストールしました。 pixbufにputpixel/getpixelの能力を持たせたい。しかし、私は、私はアクセスメモリを指示することができないことがわかった。 (またはちょっと分かりません)Lispのポインタ?

機能(gdk:pixbuf-get-pixels pixbuf)は私に数字のメモリアドレスを返します。 C++では、必要なピクセルに簡単にアクセスできます。私自身のputpixelをLispに書く方法はありますか?

答えて

7

Lispでは、Cライブラリにアクセスしてダイレクトメモリアクセスを行う現代的でポータブルな方法はCFFIです。

あなたはこのようにそれを使用することができます:

>(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)