7

最近 Lisp の学習を始めたので、gtk インターフェイスを使用するプログラムを書きたいと思っています。lambda-gtk バインディングを (CMUCL に) インストールしました。pixbuf に putpixel/getpixel 機能が必要です。しかし、メモリに直接アクセスできないことがわかりました。(または単に方法がわからない)

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

4

1 に答える 1

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)
于 2009-11-16T19:24:56.097 に答える