問題タブ [cffi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ラッパーのコンパイル時の SWIG [C++ to Lisp(CFFI)] エラー
私は SWIG を使用した C++ と Lisp の間のインターフェースの初心者です。SWIG のドキュメントに従っていますが、問題に直面しています。これは私がインターフェースしたい単純なプログラムです (Lisp で簡単に実行できますが、C++ コードを Lisp にインポートする方法を理解する必要があります):
test.cpp:
test.hpp:
SWIG を使用するために、インターフェイス ファイルを作成します。
test.i:
そして、次のコマンドラインを実行しました:
しかし、test_wrap.cxx をコンパイルすると、ターミナルには次のように表示されます。
誰でもそれで私を助けることができますか?
common-lisp - CFFI が特定の機能でハングする
CFFI を使用して、 Chipmunk2d (2D 物理シミュレーション ライブラリ) のCommon Lisp で FFI を作成しています。
REPL で評価すると、次のようになります。
印刷された出力は私自身の翻訳者 (以下を参照) からのものですが、REPL は返されません。
私は Emacs 24.5、Mac OS X 10.10.5 で Slime を使用しています。には何も印刷されていません*inferior-lisp*
。
私は CCL 1.11-r16635 (DarwinX8664) と SBCL 1.2.0 を試しました。コマンド ラインで sbcl を直接実行しようとしても、動作は同じです。ハングし、デバッガーがありません。
私は何を間違っていますか?
他の機能をテストしましたが、正常に動作します。
これらは私が定義した外国の翻訳者です:
これらは私の関数定義です:
c++ - SWIG [C++ to LISP(CFFI)] C++ の配列を CFFI リストにラップする方法は?
int の配列を (ポインター (int*) として) 返す単純な C++ 関数があり、ラップが完了すると、CFFI はそれをポインターとして認識します。それは論理的ですが、私が欲しいのはCFFIであり、リストとして表示されます。SWIG構成でそれを行う方法はありますか?
助けてくれてありがとう
pointers - Common Lisp CFFI: ポインターへのポインター
日時計 CVODEライブラリの CFFI ラッパーを作成しようとしています。SWIG は Sundials のヘッダーがかなり相互接続されており、SWIG が適切なヘッダーを見つけられなかったため、窒息していました。
今、私はそれが正しく動作するかどうかをテストしようとしています. 今のところ、単に「問題オブジェクト」を作成して削除するだけです。そこから問題が始まります。したがって、「問題オブジェクト」は関数を介して割り当てられます
ラッパーを作成したのは次のとおりです。
PS。SUNDIALS_EXPORT
(少なくともUnixでは)基本的に何もありません。
ここで、オブジェクトを破壊するために、Sundials は独自の関数を使用します。
そのため、 によって作成されたオブジェクトへの参照を渡す必要がありますCVodeCreate
。Cでは、私の記憶に問題がなければ、次のようなことをしたでしょうCVodeFree(&problem_object)
。CL では、この関数のラッパーを作成しました。
したがって、ここCOVDE-MEM
にポインターへのポインターがあります。質問は、CL/CFFI でポインターのポインターを取得する方法ですか? コードの冒頭は次のとおりです。
(PS. に渡される数値について心配する必要はありません。CVODECREATE
どのメソッドを使用するかを示すだけであり、読みやすくするために定数を定義する必要があります)
のよう*P*
なものです
に直接渡すとCVODEFREE
、エラーになります。
渡そうとしまし(CFFI:POINTER-ADDRESS *P*)
たが、同様の「バスエラー...」が発生します(この関数が必要なものを返すかどうかさえわかりません)。私もやろうとしましたが(CFFI:MAKE-POINTER (CFFI:POINTER-ADDRESS *P*))
、もう一度成功しませんでした。
この質問は、次のアプローチを提案しています。
これは機能します (少なくともエラーは発生しません)。私はそれがどのように機能するかを理解していると思います:それは、ポインタへのポインタを作成します(メモリを割り当てP
ます)。最後に、このポインタからポインタへのポインタを に渡します。これはまさにこれを期待しています。最後に、フォームが終了すると、割り当てられたメモリが解放されます。これは正しいアプローチですか?そして、それは私が取ることができる唯一のものですか?MEM-REF
*p
CVODECREATE
CVODEFREE
P
common-lisp - Common Lisp & CFFI: グローバル変数の変更
私の目標は、C グローバル変数を変更することです。
次の C ヘッダー ファイルがあるとします。
および C ソース ファイル:
global_variable は、によって生成された共有ライブラリ内に正しく表示されます
私のlispインターフェースは次のようになります。
エラーなしで test を呼び出すことはできますが、global_variable を次のように変更することはできません。
未定義の変数の警告が表示された後、新しい変数を定義します (と思います)。
問題は、common lisp (sbcl) で global_variable を変更する方法ですか?
前もって感謝します!