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

0 投票する
2 に答える
874 参照

external - %はOCamlの外部宣言で何を意味しますか?

OCaml 標準ライブラリの多くのexternal宣言には、関数名の先頭に % があります。たとえば、次のように定義されていますint_of_float

「%」は何を意味しますか?

0 投票する
3 に答える
1740 参照

haskell - haskellで構造を「解凍」する方法

私は最近この問題に遭遇し、解決策を見つけましたが、より良い(またはより慣用的な)解決策があるかどうか疑問に思っています。

私は色の構造を持っています:

そして、実際にはカイロから、色成分を個別に渡したい関数があります。

setSourceRGBしたがって、をとらないので、このデータ構造を何らかの方法で「解凍」する必要がありRgbます。私は2つの方法を見つけました。Rgb1つは、 :の内容を適用する関数を定義することです。

それから私はすることができます:

私が思いついたもう1つの方法は、ケースを使用してインラインラムダ式を実行することです。これは、別の関数を定義する必要がないことを意味します。

私はこれに完全に満足しているわけではありませんが、どういうわけか、いくつかの値を渡すためだけに関数を適用することは正しくないようです。私はそれを好転させてRgb、の正しいタイプに「変換」できるようにしたいと思いsetSourceRGBます。残念ながら、機能を持つことは不可能だと私には思えます

に渡すことができますsetSourceRGB。おそらくapplyRgb最善の解決策ですが、それを次のように表現できるより良い方法があるかどうか疑問に思っています。

0 投票する
2 に答える
1830 参照

c++ - まともな C++ FFI によるハッキング可能なスキームの実装

私が試したのは、scheme48、chicken、gambit、clojure です。

読み取り可能 (実装自体) で、適切な C++ ffi と適切なデバッグ サポートを備えたスキームの実装を探しています (したがって、例外が発生した場合は、再帰的な repl にポップする必要があります)。

人々はどのような提案をしていますか?

0 投票する
3 に答える
8145 参照

java - Java内からHaskell関数を呼び出すための最良の方法

私はJavaプログラム内からHaskell関数を実行する効率的な方法を探しています。exec()を使用してGHCと対話することを検討しましたが、より良いメソッドがあるはずです。

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

erlang - erlang "erl_nif" 機能

私は主にポート ドライバーを介して Erlang とやり取りしてきましたが、erl_nif 機能の出現により、もうポート ドライバーに投資する必要があるかどうか疑問に思っています。

erl_nif機能がブームになるか、それとも崩壊するFFIか?

0 投票する
2 に答える
1199 参照

ruby - Ruby FFI Struct レイアウトの繰り返し

Rubyのacライブラリの関数にアクセスするために、本当に素晴らしいruby ffiライブラリを使用しています。

Ruby FFI::Struct のレイアウトを反復処理する方法はありますか?

FFI::構造体の例:

これは機能していないようですが、以下の疑似コードのようなものです:

0 投票する
2 に答える
12562 参照

c - 「外部関数インターフェイス」を使用して Go から C を呼び出す方法

Go の「外部関数インターフェイス」を使用して C 関数を呼び出すにはどうすればよいですか?

このインターフェイスはFAQで言及されていますが、ドキュメントの他の場所で言及されているのを確認できません。

0 投票する
2 に答える
291 参照

haskell - Compiled Haskell libraries with FFI imports are invalid when imported into GHCI

I am using GHC 6.12.1, in Ubuntu 10.04

When I try to use the FFI syntax for static storage, only modules running in interpreted mode (ie GHCI) work properly. Compiled modules have invalid pointers, and do not work. I'd like to know whether anybody can reproduce the problem, whether this an error in my code or GHC, and (if the latter) whether it's a known issue.

I'm using sys_siglist because it's present in a standard library on my system, but I don't believe the actual storage used matters (I discovered this while writing a binding to libidn). If it helps, sys_siglist is defined in <signal.h> as:

I thought this type might be the problem, so I also tried wrapping it in a plain C procedure:

However, importing that doesn't change the result, and the printf() call prints the same pointer value as show siglist_a.

My suspicion is that it's something to do with static and dynamic library loading.

Update: somebody in #haskell suggested this might be 64-bit specific; if anybody tries to reproduce it, can you mention your architecture and whether it worked in a comment?

Code as follows:

--

--

I would expect something like this output, where all pointer values identical and valid:

However, if I compile A.hs (with ghc -c A.hs), then the output changes to:

0 投票する
3 に答える
2009 参照

ocaml - それを使用してClibとOCamlexeをコンパイルし、すべてocamlfindを使用します

私はocamlfind、CライブラリとそのCライブラリを使用してOCaml実行可能ファイルをコンパイルするために使用する方法を理解しようとしています。

かなりばかげたサンプルファイルのセットをまとめました。

ライブラリをコンパイルする方法は次のとおりです。

作成したライブラリを使用できないようですが、次のようになります。

OCamlツールは私にはやや不思議なので、どんなポインタでも大歓迎です。

0 投票する
3 に答える
370 参照

c - Racket では、別の関数が呼び出された後に関数をエクスポートできますか?

スキームの FFI を使用して libpython へのバインディングを作成しようとしています。これを行うには、python の場所を取得して を作成しffi-lib、そこから関数を作成する必要があります。たとえば、私はこれを行うことができます:

これで問題ありませんが、関数をエクスポートする方法が思い浮かびません。たとえば、次のようなことができます。

...しかし、どうにかして libpython (link-python によって作成された) への参照をグローバルに保存する必要があります。link-python が呼び出されたら、これらの関数をエクスポートする方法はありますか? 言い換えれば、モジュールを使用している誰かがこれを行うことができるようにしたいと思います:

...またはこれ:

...しかし、これでエラーが発生します:

これどうやってするの?