gpt4 book ai didi

lisp - lambda-gtk 负指针

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:59 24 4
gpt4 key购买 nike

我试图在 Lisp 中的 (Gdk) pixbuf 上编写我自己的 put-pixel。当我最终意识到如何在 CL 中对 C 指针进行操作时,出现了新的障碍 - (gdk:pixbuf-get-pixels pb) 返回负数。我的问题是:我能以某种方式将它转换为有效指针吗?我尝试使用 cffi:convert-from-foreign 和 cffi:translate-from-foreign(它们之间有什么区别?)失败了。

下面是我的实际(不工作)代码:

(defun put-pixel (pixbuf x y r g b)
(let ((p (+ (gdk:pixbuf-get-pixels pixbuf) (* x (gdk:pixbuf-get-n-channels pixbuf)) (* y (gdk:pixbuf-get-rowstride pixbuf)))))
(setf (cffi:mem-aref p :unsigned-char 0) r)
(setf (cffi:mem-aref p :unsigned-char 1) g)
(setf (cffi:mem-aref p :unsigned-char 2) b)))

最佳答案

CFFI:TRANSLATE-FROM-FOREIGN是一个泛型函数。您可以使用 CFFI:DEFINE-FOREIGN-TYPE 定义自己的外部类型然后向 CFFI:TRANSLATE-FROM-FOREIGN 添加一个方法来指定从外部值到 Lisp 值的转换应该如何工作。

CFFI:CONVERT-FROM-FOREIGN如果您需要显式转换某些值,您应该调用它。它将在幕后调用 CFFI:TRANSLATE-FROM-FOREIGN,并且可能会在可能的情况下执行一些编译时优化。

同样适用于 CFFI:CONVERT-TO-FOREIGNCFFI:TRANSLATE-TO-FOREIGN .

关于lisp - lambda-gtk 负指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com