如何在sbcl中找到外来结构的大小?

时间:2018-10-11 16:19:59

标签: common-lisp ffi sbcl

我正在尝试在SBCL中获取外来结构的大小(以使外来函数的数据缓冲区具有适当的大小)。在C或Pascal中,sizeof()进行相同的工作。我的方法是:

(define-alien-type MY-STRUCT
(struct MY-STRUCT
        (MY-FIELD (array char 30))))

(defmacro size-of (type) 
    (let ((x (gensym)))
        `(let ((,x (make-alien (array ,type 2))))
             (- (sb-sys:sap-int (alien-sap (deref (deref ,x) 1)))
                (sb-sys:sap-int (alien-sap (deref (deref ,x) 0)))))))

(size-of MY-STRUCT) ;; => 30

在SBCL中是否有适当的方法来获取外来结构的大小?

0 个答案:

没有答案