我已经构建了一些玩具C++库,以便从Lisp快速创建Qt窗口。我知道common-qt存在,我只是想学习如何使用cffi。Lisp,cffi,let和memory
现在,我有4个绑定功能:
- 创建的应用程序:创建一个QApplication的,并返回一个指针
- 创建窗口:创建一个的QMainWindow和返回poiner
- 显示:秀指定为参数
- EXEC窗口:Qt的执行函数
下面是工作口齿不清代码perfec TLY:
(defctype t-app :pointer)
(defctype t-window :pointer)
(defcfun (create-application "create_application") t-app)
(defcfun (exec "exec") :void (app t-app))
(defcfun (create-window-aalt "create_window_aalt") t-window)
(defcfun (show "show") :void (o t-window))
(defparameter a (create-application))
(defparameter w (create-window-aalt))
(show w)
(exec a)
但是,如果使用LET还是让* ...我有一个内存错误!
(let* ((a (create-application)) (w (create-window-aalt)))
(show w)
(exec a))
CORRUPTION WARNING in SBCL pid 1312(tid 140737353860992):
Memory fault at a556508 (pc=0x7ffff659b7f1, sp=0x7ffff2bbe688)
The integrity of this image is possibly compromised.
Exiting.
有人知道为什么吗?
我使用SBCL:
env LD_LIBRARY_PATH=`pwd` \
env LD_PRELOAD=/usr/lib/libQtGui.so.4 \
sbcl --script aalt.lisp
感谢。
感谢您的回答!我已经使用extern“C”,你可以看看我的代码:http://pastebin.archlinux.fr/464826 那么,它是在Lisp的工作,如果我使用defparameter,不让,所以我想这是不是C++的例外......但是我会尝试它,我会让你知道的。 – Filippo
谢谢,它的工作原理!但只有使用Clisp,我仍然有与SBCL相同的错误。任何线索? – Filippo