問題タブ [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.
lisp - CFFI を介して結果を取得するためのポインターを渡す
Cの関数は次のとおりです。
CFFI を介して Common Lisp で呼び出したいのですが、どうすればよいですか?
common-lisp - シンプルな C ライブラリの cffi ラッパーを生成する方法
C ライブラリ ( SOIL )用の Common Lisp cffi ラッパーを生成したいのですが、cl と cffi には自信がありますが、どのライブラリを使用すればよいか、どのように開始すればよいかわかりません。基本的にはもっと詳しい質問をしますが、わからないことはわかりません。
pointers - Lisp、cffi、let、およびメモリ
Lisp から Qt ウィンドウをすばやく作成するために、おもちゃの C++ ライブラリを作成しました。common-qt が存在することは知っていますが、cffi の使用方法を学ぼうとしています。
現在、バインドされた関数が 4 つあります。
- create-application : QApplication を作成し、ポインタを返します
- create-window : QMainWindow を作成し、ポインタを返します
- show : 引数として指定されたウィンドウを表示します
- exec : Qt exec 関数
完全に動作する Lisp コードを次に示します。
しかし、LET または LET* を使用すると、メモリ障害が発生します。
誰かが理由を知っていますか?
私はSBCLを使用しています:
ありがとう。
opencv - cffiを使用してopencv関数をlispに変換しようとするこの試みで、私は何を間違っていますか
opencv 関数は cvSmooth で、これが私が書いた cffi コードです
C 関数インターフェイス:
基本的に、+gaussian+ は opencv のように悪く見え、+bilateral+ はまったく動作しません。使用するコードは実行されませんが、残りは正常に動作します.....何が間違っていますか?
c - defconstantを含むリストを持つcffiのforeign-alloc
私はやろうとしています:
しかし、エラーメッセージが表示されます:
これを定義できることは非常に重要です。
私が書いているコードのポインタとして。どうすればこれを達成できますか?
c - cffi-libffi で構造体を値渡ししますか?
私はCFFIが構造体を値で渡すことができないという印象を受けていますが、CFFIのドキュメントには次のように書かれています:
値によって構造体を関数に渡したり返したりするには、cffi-libffi システムをロードし、構造体を として指定します
(:struct structure-name)
。:pointer
ポインタを渡したり返したりするには、またはを使用できます(:pointer (:struct structure-name))
。
get-size
このopencv関数のラッパーであるcl-opencv関数を再ラップしています:
また、cl-opencv の作成者がライブラリを作成したとき、CFFI には cffi-libffi システムで値によって構造体を渡す機能がなかったと思われるため、次のすべてのコードを使用してラップする必要がありましたcvGetSize
。
上で引用した CFFI ドキュメントを考えると、このcvGetSize
構造体CvSize
を値で渡すにはどうすればよいでしょうか?
cl-opencvパッケージを更新するつもりです。cl-opencv パッケージのどこで、どのように CFFI ドキュメントに従って「cffi-libffi システムをロード」し、どこで「構造を」と指定するかを知りたいです(:struct structure-name)
。そして、「:pointer または (:pointer (:struct structure-name))」のいずれかを使用して、「ポインターを渡すか返す」。
上記のcvGetSize
ラッパーを使用してそれを行う方法の詳細な手順を使用できます。
@Rördの編集
誠実な対応に感謝します
どちらの方法でも同じエラーが発生します...しかし、テスト目的で、このようにcffi-libffiを現在のセッションにロードするとしましょう(出力付き)
ロードされるので、次のように提供した defcfun と defcstruct のみを実行します (出力付き):
gsll をロードした状態で (cffi-libffi を使用)、gsll テストを実行すると、ここに示されているすべてのテストに合格するため (出力付き)、libffi が正しくインストールされていることがわかります。
問題として (:struct cv-size) を使用して defcfun を呼び出しているようには見えません。
私は同じエラーが発生します
このように ipl-image 構造体を実行できます
そして、cffi-libffiがロードされ、あなたの(:struct ipl-image)が正常に動作するようになった私のcreate-imageラッパーは...出力で示されています
イメージの作成
しかし、私が走るとき
repl でイメージを作成しても何も起こらず、repl がハングするだけです...
しかし、(:struct ipl-image) の代わりに ipl-image を使用して create image ラッパーを実行すると
私は実行できます:
これを実行して構造体の値にアクセスします(出力あり)
しかし、私は取得した値で構造体を取得していません
これを使用してcでその値img-> colorModelを計算すると
どんな助けでも大歓迎です
わかりました 1 つ以上の編集:
私はそれをもう一度試してみましたが、ここで私の出力です
初めて何を間違えたのかわかりませんが...結果を確認して、構造体を値で渡したばかりであることを確認できれば、永遠に感謝します
ありがとうロッド
ロッドのデバッグを手伝ってくれることにまだ興味があるなら、もう一度編集してください
エラーが発生した場合:
そして、これがそれを引き起こした履歴です(これは、前の編集を投稿した直後に発生したため、私のemacsにはすべての前の編集コードがまだロードされています):
私はそれを得る:
defunにアクセスします...私はそれをトレースしたので、実行したとき-出力で表示されます:
エラーが発生します:
defcfun の出力は単なるリストであり、with-foreign-slots にはポインターが必要なためだと思います
私はこれを実行しました:
確認するため、その単なるリスト
ところで、これらの関数をテストに使用しました
より純粋な出力があるため... create-image は、最初にこの上部に投稿した get-size のハッカーを使用していますか?
私はすべてのハッカーなしで create-image と get-size を使用し、戻り値に構造体を使用するだけで、make-size の使用をやめてより純粋にすることができます....それについてのアドバイスは金になる...これが私がcreate-imageを持ちたい方法です...私はあなたの(Rordの)defcfunからの出力を受け入れるためにそれを得なければなりません...私は今あなたのdefcfun出力を変えようとしています((HEIGHT 480 WIDTH 640)) ポインタへ...だから、これで実行されます
それとも、メイクサイズ全体が必要になるのでしょうか...
また、参考までに、追加したdefunを変更しました
そして、それは今でも動作します...私が何かを台無しにした場合、そしてあなたのdefunがより優れていた場合、まだ好奇心が強いです
編集!!!!私はそれをすべて理解しました!!!!!
EDIT!!!!I GOT IT ALL FIGURED!!!!!!!!...Part....II - さらに良い!
@リアム編集
わかりました、translate-from-foreign メソッドを試してみましたが、うまくいきました。これらは structs.lisp ファイルで定義されています
get-size と create-image は次のように定義されます
これが size->int64 の定義です
しかし、私はtranslate-foreign defmethodのアイデアが大好きです
だから、以下の from メソッドの外国語への翻訳バージョンを作成する方法を教えてもらえないかと思っていました.これは gsl に対するものなので、これは本当に迅速に行われるのに役立ちます....これまでのすべてについてご協力いただきありがとうございます