我已經構建了一些玩具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