5

提供される FFI を使用して、Racket で Chipmunk 物理ライブラリを使用しようとしています。ただし、ライブラリを正しくロードしているように見えても、実際に FFI が Chipmunk ライブラリ内の関数を見つけるのに問題があります。

Windows 8 と Visual Studio 2008 でビルドされた最新バージョンの Chipmunk (6.1.1) を使用しています。chipmunk_ffi.h ファイルが読み込まれるように、「CHIPMUNK_FFI」フラグを設定しています。「マルチスレッド DLL」および「DLL としてビルド」オプトインを使用して、リリース DLL 構成でコードをビルドしています。私が使用しているラケットコードは次のとおりです。

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

そして、私はエラーが発生しています:

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]

さらに情報が必要な場合はお知らせください。これについて何か助けていただければ幸いです。

4

1 に答える 1

4

一部の関数 ( などは としてcpvaddエクスポートされます_cpvadd)。

http://code.google.com/p/chipmunk-physics/source/browse/trunk/include/chipmunk/chipmunk_ffi.hを参照してください。

于 2012-06-03T19:33:59.113 に答える