2012-06-03 30 views
5

Tôi đang cố gắng sử dụng thư viện vật lý Chipmunk trong Racket bằng FFI mà nó cung cấp. Tuy nhiên, tôi hiện đang có vấn đề với thực sự nhận được FFI để tìm các chức năng trong thư viện Chipmunk, mặc dù nó có vẻ như tải thư viện một cách chính xác.Vấn đề FFI với vợt và Chipmunk

Tôi đang sử dụng phiên bản mới nhất của Chipmunk (6.1.1) được xây dựng trên Windows 8 với Visual Studio 2008. Tôi có cờ "CHIPMUNK_FFI" được đặt để tệp chipmunk_ffi.h được tải. Tôi đang xây dựng mã theo cấu hình Release DLL với "Multi-Threaded DLL" và "Build as a dll" optoins đang được sử dụng. Mã vợt Tôi đang sử dụng như sau:

#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))) 

Và tôi nhận được lỗi:

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] 

Hãy cho tôi biết nếu bạn cần thêm thông tin. Tôi thực sự sẽ đánh giá cao một số trợ giúp với điều này.

+1

BTW, bạn thực sự nên thử [mailing list] (http://lists.racket-lang.org/users/) - Tôi nghĩ rằng Jay đã chơi với mã keo cho một trong hai này hoặc một số động cơ vật lý khác, vì vậy có lẽ bạn có thể bắt đầu từ nơi anh ta đã bỏ đi ... –

Trả lời