Указатели в Лиспе? - PullRequest
       56

Указатели в Лиспе?

7 голосов
/ 16 ноября 2009

Я недавно начал изучать Lisp и хотел написать программу, которая использует интерфейс gtk. Я установил привязки lambda-gtk (на CMUCL). Я хочу иметь возможность putpixel / getpixel на pixbuf. Но я обнаружил, что не могу получить прямой доступ к памяти. (или просто не знаю как)

Функция (gdk: pixbuf-get-пикселей pixbuf) возвращает мне число - я думаю, адрес памяти В C ++ я могу легко добраться до нужного мне пикселя. Есть ли способ написать свой собственный путпиксель на Лиспе?

1 Ответ

7 голосов
/ 16 ноября 2009

В 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)
...