問題タブ [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.

0 投票する
1 に答える
148 参照

c++ - ラッパーのコンパイル時の SWIG [C++ to Lisp(CFFI)] エラー

私は SWIG を使用した C++ と Lisp の間のインターフェースの初心者です。SWIG のドキュメントに従っていますが、問題に直面しています。これは私がインターフェースしたい単純なプログラムです (Lisp で簡単に実行できますが、C++ コードを Lisp にインポートする方法を理解する必要があります):

test.cpp:

test.hpp:

SWIG を使用するために、インターフェイス ファイルを作成します。

test.i:

そして、次のコマンドラインを実行しました:

しかし、test_wrap.cxx をコンパイルすると、ターミナルには次のように表示されます。

誰でもそれで私を助けることができますか?

0 投票する
0 に答える
224 参照

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 を直接実行しようとしても、動作は同じです。ハングし、デバッガーがありません。

私は何を間違っていますか?

他の機能をテストしましたが、正常に動作します。

これらは私が定義した外国の翻訳者です:

これらは私の関数定義です:

0 投票する
0 に答える
140 参照

c++ - SWIG [C++ to LISP(CFFI)] C++ の配列を CFFI リストにラップする方法は?

int の配列を (ポインター (int*) として) 返す単純な C++ 関数があり、ラップが完了すると、CFFI はそれをポインターとして認識します。それは論理的ですが、私が欲しいのはCFFIであり、リストとして表示されます。SWIG構成でそれを行う方法はありますか?

助けてくれてありがとう

0 投票する
1 に答える
1192 参照

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*pCVODECREATECVODEFREEP

0 投票する
1 に答える
209 参照

common-lisp - Common Lisp & CFFI: グローバル変数の変更

私の目標は、C グローバル変数を変更することです。

次の C ヘッダー ファイルがあるとします。

および C ソース ファイル:

global_variable は、によって生成された共有ライブラリ内に正しく表示されます

私のlispインターフェースは次のようになります。

エラーなしで test を呼び出すことはできますが、global_variable を次のように変更することはできません。

未定義の変数の警告が表示された後、新しい変数を定義します (と思います)。

問題は、common lisp (sbcl) で global_variable を変更する方法ですか?

前もって感謝します!