問題タブ [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.
haskell - 格納可能な空データ宣言
C ライブラリの Haskell ラッパーを作成しようとしています。基礎となる構造体は複雑すぎて明示的な型として表現できず、実際には C 関数間の受け渡し以外には使用しないのでEmptyDataDecls
、GHC に解決してもらうために使用しています。
必要なのは、これらのデータ型のいずれかへのポインターですが、それを使用して作成しようとするalloca
と、データが type ではないと不平を言いStorable
ます。例えば:
GHC は、 のインスタンスがないと言って、これをコンパイルしませんStorable Struct
。私はそれを自分で実装できます:
しかし、それは目的を打ち負かすことに近づいています-構造体の内容を気にしないのであれば、そのようなものを定義する必要はありません。
クラスPtr
がStorable
. したがって、呼び出す前にpeek
onを使用することで、目的を達成できます。ptr
get_struct
ただし、これはハックのように感じます。
Storable
インスタンスを定義せずに空のデータ宣言を考慮する方法はありますか?
c - 正しい Haskell C タイプを選択するには?
私はいくつかの Haskell プログラミング言語を勉強しましたが、C プログラムから Haskell 関数を呼び出すことができることを知りました。Haskell の研究中に、Haskell で単語頻度カウンターを作成しました。その関数を C プログラムから呼び出したいのですが、その方法がわかりません。haskell.org で次の 2 つの Web サイトを見つけました。
それにもかかわらず、どのタイプを使用するか少し迷っています。私の haskell プログラムは、次の関数のパイプラインです。
putStr 。線を外します。マップ testF 。並べ替えられたツリー
自分が機能する場所
- testFは testF の型です:: Show a => ([Char],a) -> [Char]
- sortedTreeは sortedTree の型です:: (Num a, Ord a) => [Char] -> [([Char],a)]
パイプラインを呼び出す関数だけを変換するのではなく、各関数の型を C 型に変換する必要があることは確かです。「メイン」関数のタイプは
fileFreq :: [文字] -> IO ()
これらすべてに加えて、プレリュード タイプではない Haskell バイナリ ツリーを使用しています。
Haskell コード全体は次のとおりです。
誰でもこれで私を少し案内できますか?
python - Python から Haskell 関数を呼び出す
Python からいくつかの Haskell ライブラリ (Darcs、Pandoc など) を使用したいのですが、Python には Haskell への直接の外部関数インターフェイスがないようです。それを行う方法はありますか?
c - openCV を使用した PLT Racket の FFI
PLT Racket を介して Web カメラを制御し、理想的には、OpenCV の C API のいくつかの軽量ラッパー ライブラリを作成したいと考えています。ただし、OpenCV のどのオブジェクト ファイルがライブラリであるかがわからないという点で、少し問題があります。恥ずかしいことです。Python API がどのように機能しているかを調べたところ、モジュールが cv.so ファイルにあることがわかりましたが、バイナリで何を使用すればよいかわかりません。私はMac OSXを使用しています
私はこれを持っています
しかし、「lib-name」として渡すファイルがわかりません。私のopencvのインストールディレクトリには、多数の.dylibファイルを含む../opencv/2.2/libがあります。どれも機能していないようですが、これまでのところ最良の推測です。別のコンパイラ オプションで OpenCV をビルドする必要がありますか?
ruby - RVM 経由で Ubuntu、Ruby 1.9.2 にネイティブ拡張機能を使用する gem をインストールする際のエラー
ffi gem をインストールしようとすると、エラーが発生します。
ネイティブ拡張機能を使用して gem をインストールしているときに、あらゆる種類のエラーが頻繁に発生するため、Ubuntu のインストールに何か問題があると思いますが、何が原因かわかりません。問題の診断に必要な情報を投稿します。
編集: ffi gem (最後の 2 行目) に移動し、6 行目の rake 行を実行すると、「RubyGem rake-compiler が見つかりませんでした」というメッセージが表示されます。
gem i rake-compiler を実行し、再度 rake を実行すると、次のようになります。
アップデート:
これらは私のレーキgemspecです:
最後のものは gem が見える場所ですが、その gemspec は最初のものとは異なり、実行可能ファイルは含まれていません。ただし、長いものをコピーしても問題は完全には解決されません-rake実行可能ファイルが見つからないファイルが表示されます。
c - C 関数のラップと呼び出しについて
私はこの中国のブログからこの質問を受け取ります http://chenyufei.info/blog/2011-02-28/wrap-c-function-closure-gcc-nested-function/ 著者は C 言語でクロージャを使用したいと考えています。 GCCにはネストされた関数(およびクロージャー)の機能があることがわかりました。例えば:
しかし、それは一般的な解決策ではありません。create_wrap_function は、 func_t が形式を制限するため、関数形式が固定されています。
ご存じのとおり、Lua にはクロージャがあり、C 関数も呼び出すことができます。私が実装したいのは、呼び出したい関数は foo1 と foo2 で、引数と戻り値の型が異なります。
C クライアントでは、次のように関数を呼び出します。
Do_Lua_Wrap では、foo1 と 1 を Lua 関数に渡し、通常のプロセスと同様に foo1 関数を呼び出します。次に、foo2 と 1 つの char* と 1 つの double 値を Lua 関数に渡し、通常のプロセスと同様に foo2 関数を呼び出します。Lua 関数では、 FILEとLINEに関する情報をログに 記録し、関数の引数に関する追加のログを書き込むことができます。
しかし、関数 Do_Lua_Wrap を C と Lua で記述する方法がわかりません。可能ですか?
もしよろしければ、アドバイスをいただけないでしょうか?
python - Common Lisp から Python ライブラリを使用する簡単な方法はありますか?
Common Lisp コードを書いているときに本当に恋しいのは、Python ライブラリ (標準ライブラリとサードパーティ モジュールの両方) へのアクセスです。CLPython は、ほとんどのライブラリの使用を妨げる Python 機能の限られたサブセットを提供するため、私にとってはあまり役に立ちません。Common Lisp から Python コードを呼び出して、CPython や PyPy などの Python VM で実行できるようにしたいと考えています。
unicode - OpenDBXへのSmalltalkFFI呼び出しのUnicode文字
非ASCII文字を含むいくつかの文字列をデータベース(Postgress)に挿入する必要があります。これが最小限の例です。で「引数を強制できませんでした」というメッセージが表示され<cdecl: long 'odbx_query' (ulong char* ulong) module: 'opendbx'>
ます。私が理解していることから、これはFFIエラーであり、呼び出しはデータベースバックエンドに到達しませんでしたが、よくわかりません。
ruby - ruby gem でカスタム c コードを呼び出すために ruby ffi を使用する方法
私が書いた ac 関数を呼び出す ruby gem を作りたいです。例えば:
これは、私の rubygem の ac ファイルにあります。次に、ffi インターフェイスでラップすることにより、Ruby で呼び出すことができるようにしたいと考えています。
ただし、これを設定する方法がわからないため、gem がインストールされたときに c ファイルがコンパイルされてライブラリ (「MyLib」という名前) になり、ffi がライブラリを検出して上記のコードで使用します。 .
誰かがこれを行う方法を知っていますか、またはこれを行うためのより良い方法はありますか? Ruby を拡張する標準的な方法 (The Pragmatic Programmer's Guide の Ruby の拡張セクションで説明されている) を使用したくないことに注意してください。
この質問にとって重要な場合、私は自分の宝石を作るために宝石商を使用しています。
ruby-on-rails - タイムアウト、システム タイムアウト、ターミネータが FFI ベースの機能で機能しない
共有ライブラリ関数 (サード パーティ関数) の FFI を介してラッパーを作成しました。この共有ライブラリは、サーバーとの接続を確立しようとします。接続確立中、サーバーに到達できない場合、サードパーティ機能は 3 分間待機します。これを回避するために、レールの呼び出し中に次のタイムアウトを使用しようとしましたが、残念ながら機能しませんでした。
- ネイティブ タイムアウト
- システムタイムアウト
- ターミネーター
注:ターミネーターを使用すると、それによって作成された追加のプロセスが無効なプロセスになりました。
Ruby Enterprise バージョン 1.8 を使用しています