Próbuję użyć biblioteki fizyki Chipmunk w Racket przy użyciu FFI, które zapewnia. Jednak obecnie mam problemy z faktycznym uzyskaniem FFI, aby znaleźć funkcje w bibliotece Chipmunk, mimo że wydaje się poprawnie załadować bibliotekę.Problemy FFI z rakietą i wiewiorem
Używam najnowszej wersji gry Chipmunk (6.1.1) opartej na systemie Windows 8 z Visual Studio 2008. Mam ustawioną flagę "CHIPMUNK_FFI", aby załadować plik chipmunk_ffi.h. Buduję kod pod konfiguracją Release DLL z opcją "Multi-Threaded DLL" i opcją "Build as a dll". Kod Rakieta używam jest następująco:
#lang scheme
(require ffi/unsafe
ffi/unsafe/define)
(define chipmunk (ffi-lib "./chipmunk"))
(define-ffi-definer define-chipmunk chipmunk)
(define _cpFloat _double)
(define cpFloat? real?)
(define _cpDataPointer _pointer)
(define _size_t _ulong)
(define _cpHashValue _size_t)
(define-cstruct _cpVect
([x _cpFloat]
[y _cpFloat]))
(define cpv
(get-ffi-obj "cpvadd" chipmunk (_fun _cpVect _cpVect -> _cpVect)))
i otrzymuję błąd:
ffi-obj: couldn't get "cpvadd" from "chipmunk.dll" (The specified procedure could not be found.; errno=127)
=== context ===
C:\Program Files (x86)\Racket\collects\ffi\unsafe.rkt:180:2: get-ffi-obj*
C:\Users\me.000\AppData\Roaming\Racket\planet\300\5.2.1\cache\jaymccarthy\chipmunk.plt\1\0\chipmunk-ffi-new.ss: [running body]
C:\Users\me.000\AppData\Roaming\Racket\planet\300\5.2.1\cache\jaymccarthy\chipmunk.plt\1\0\chipmunk-new.rkt: [traversing imports]
C:\Users\me.000\AppData\Roaming\Racket\planet\300\5.2.1\cache\jaymccarthy\chipmunk.plt\1\0\main.rkt: [traversing imports]
C:\Users\me.000\Dropbox\Code\workspace-racket\learning\main.rkt: [traversing imports]
Daj mi znać, jeśli potrzebujesz dodatkowych informacji. Byłbym wdzięczny za pomoc.
BTW, naprawdę powinieneś spróbować listy mailingowej [] (http://lists.racket-lang.org/users/) - Myślę, że Jay grał z kodem kleju ani dla tego lub jakiś inny silnik fizyki, więc może zaczniesz od miejsca, w którym skończył ... –