問題タブ [ffi]
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.
python - Python:SWIGとctypes
Pythonでは、共有ライブラリのエントリポイントを呼び出すために、どのような状況でSWIGがctypesよりも優れた選択肢ですか?SWIGインターフェイスファイルがまだない場合を考えてみましょう。
2つのパフォーマンスメトリックは何ですか?
.net - モノラルでALSAをどのように行いますか?
LinuxでMonoを使用してALSA(低レベルオーディオAPI)にアクセスする方法を知っている人はいますか?
注:PInvokeを使用してALSAにアクセスしたいと思っています。
c - Haskell FFI /CMPFRライブラリラッパーの問題
Doubleの代わりに任意精度の浮動小数点/ドロップを作成するために、FFIを使用してMPFRをラップしようとしていますが、すべての努力にもかかわらず、最も単純なコードは機能しません。コンパイルして実行しますが、しばらく動作するふりをした後、嘲笑してクラッシュします。単純なCバージョンのコードは、数値「1」から(小数点以下640桁)までの合計10,000回をうまく出力します。Haskellバージョンは、同じことをするように求められた場合、「1.0000 ... 0000」の289回の印刷後、および385回の印刷後、アサーションの失敗と爆弾を引き起こし、データをサイレントに破損(?)します。「動作するはず」なので、これをデバッグする方法がわかりません。
コードはhttp://hpaste.org/10923で閲覧でき、 http: //www.updike.org/mpfr-broken.tar.gzでダウンロードできます。
FreeBSD6ではGHC6.83を、Mac OSXではGHC6.8.2を使用しています。ライブラリとヘッダーファイルの正しいパス(Makefileを変更)とともにMPFR(2.3.2でテスト済み)をインストールする必要があることに注意してください。 GMPから)これを正常にコンパイルします。
質問
なぜCバージョンは機能するのに、Haskellバージョンはフレークアウトするのですか?FFIに近づくときに他に何が欠けていますか?StablePtrsを試しましたが、まったく同じ結果になりました。
他の誰かが私のコードをコンパイルして実行することにより、これがMac / BSDのみの問題であるかどうかを確認できますか?(Cコードは「機能」しますか?Haskellコードは「noworks」は機能しますか?)LinuxとWindowsの誰かがコンパイル/実行して、同じ結果が得られるかどうかを確認できますか?
Cコード:(works.c)
Haskellコード:(Main.hs---動作しません)
c - C -> Rubyインターフェースで変数を返すにはどうすればよいですか?
以前の質問のフォローアップで、ターゲット ライブラリからエラー メッセージを取得しようとしたときに失敗する部分を示しています。
@msg でエラー メッセージが返されることを期待していますが、実行すると次のようになります。
代わりにシンボル (:msg) を使用すると、次のようになります。
明らかに、Ruby と C の間でパラメーターを渡すことについて何かが欠けています。値を返すには、どのような Ruby 変数が必要ですか?
haskell - 構造体でHaskellのFFIを使用するにはどうすればよいですか?
画像を読み取るために、次のCライブラリを作成しました。
配列と構造体をForeignFunctionInterfaceで使用して情報を実際に見つけることはできません。Haskellで自分のライブラリを使用できるようにするにはどうすればよいですか?
次の例をベースとして使用しようとしました:http://therning.org/magnus/archives/315しかし、hscファイルは、上記のcコードのみを含み、それ以上のものを含まないhsファイルにコンパイルされました。もちろんコンパイルできません)。
ruby - FFIを介してRubyと結合するHaskell?
rubyもHaskellもFFIに対応しているので、
- Ruby から Haskell コードを呼び出すことは可能ですか?
- Ruby に Haskell バインディングはありますか?
ruby - Ruby Noobie: FFI 構造体に文字列値を設定する方法
Ruby で FFI 構造体を設定する初心者の問題があります。私がやりたいことは、FFI::Struct オブジェクトで文字列プロパティを設定して、C 文字列へのポインターを渡すことです。
しかし、コードを実行すると、次のエラーが発生します。
だから、ここからどこへ行けばいいのかわからない。
また、このテーマに関する適切なドキュメントやチュートリアルを知っている場合は、返信を残してください! これまでのところ、 Project Kenaiに関する wiki ドキュメントは 非常に有用であることがわかりました。
ありがとう!
文字列データ メンバーを [:char, 5] として宣言しようとしましたが、別のエラーが発生します。
メモリ ポインター型を試してみる良い提案があり、今日の仕事の後に試してみます。
c - Haskell FFI: FunPtrs の呼び出し
これが私の状況です:
av_free_packet
ffmpeg の関数を呼び出したい:
残念ながら、この関数はstatic inline
であるため、リンクされたライブラリには実際には表示されません。
ただし、これは Haskell で再実装できる非常に単純な関数です。そして、それは私がどのように行うべきか理解できないものです. 部分的な試行 (.hsc) は次のとおりです。
今のところ、この関数を C で実装することに頼ることができます (元の関数を呼び出すだけです)。
c - C:sizeof(((SomeStruct *)0)-> some_member)を実行するためのより良い方法?
構造体の特定のメンバーのサイズを取得したい。
sizeof(((SomeStruct *) 0)->some_member)
私にとってはうまくいきますが、もっと良い方法があるのではないかと思います。
#define SIZEOF_ELEM(STRUCT, ELEM) sizeof(((STRUCT *) 0)->ELEM)
使用することもできSIZEOF_ELEM(SomeStruct, some_member)
ましたが、もっと良いものがすでに組み込まれているのではないかと思います。
私の特定のユースケースはhsc2hs(Haskell Cバインディング)です。
haskell - Haskell FFI:ForeignPtrは解放されていないようです(おそらくGHCのバグですか?)
次のコードスニペットを検討してください
次の出力が生成されます。
a was deleted
後のどこかで「」が表示されると思っていたでしょうstart
。
何が起こっているのかわかりません。私はいくつかの推測があります:
- プログラムの終了時に、ガベージコレクターは残りのオブジェクトを収集しません
putStrLn
終了後、動作を停止しmain
ます。(ところで、私は外国から輸入されたもので同じことを試みputs
て、同じ結果を得ました)- 私の理解
ForeignPtr
が不足しています - GHCバグ?(env:GHC 6.10.3、Intel Mac)
Foreign.ForeignPtr.newForeignPtr
代わりに使用すると、Foreign.Concurrent.newForeignPtr
機能するようです。
出力: