如何将void **传递给Chez Scheme中的外部函数

时间:2017-02-26 18:08:49

标签: chez-scheme

当外来函数声明为

int open_db(char *path, Db **db)

在内部创建一个Db实例并将指针指定给*db,从Chez Scheme处理这个问题的最有效方法是什么?

我唯一想到的就是使用foreign-alloc为C指针分配内存,将地址传递给它,复制地址然后立即释放这个内存:

(define open_db (foreign-procedure "open_db" (string void*) int))

(define-record-type db (fields (mutable ptr)))

(define (open-db path)
(let ((pptr (foreign-alloc (foreign-sizeof 'void*))))
  (open_db path pptr)
    (let ((ptr (foreign-ref 'void* pptr 0)))
      (foreign-free pptr)
      (make-db ptr))))

有没有办法避免指针的这种临时内存分配?

0 个答案:

没有答案
相关问题