問題タブ [libffi]
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.
c - Win32関数を呼び出すための汎用C関数を作成するにはどうすればよいですか?
スクリプト言語(Cで記述)からWin32 APIにアクセスできるようにするために、次のような関数を記述したいと思います。
これは、一般的に、任意のWin32API関数を呼び出します。
(LPSTRパラメーターは基本的にバイト配列として使用されています-関数の外部で正しいデータ型を取得するために正しいサイズになっていると仮定します。また、ポインター引数と非ポインター引数を区別するには、さらに複雑さが必要だと思いますが、この質問の目的のためにそれを無視しています)。
私が抱えている問題は、Win32API関数に引数を渡すことです。これらはstdcallであるため、varargsを使用できないため、「Call」の実装は引数の数を事前に知っている必要があり、したがってジェネリックにすることはできません...
アセンブリコードでこれを行うことができると思います(引数をループし、それぞれをスタックにプッシュすることによって)が、これは純粋なCで可能ですか?
更新:今のところ、「いいえ、できません」という回答にマークを付けました。もちろん、Cベースのソリューションが明らかになった場合は、これを変更します。
更新: ruby / dlは、適切なメカニズムを使用して実装されているようです。これに関する詳細をいただければ幸いです。
ruby - FFIを介してRubyと結合するHaskell?
rubyもHaskellもFFIに対応しているので、
- Ruby から Haskell コードを呼び出すことは可能ですか?
- Ruby に Haskell バインディングはありますか?
ruby - RubyCocoa アプリケーションで NULL?
RubyCocoa でアプリケーションを作成しており、次のコードがあります。
それは私にこのエラーを与えます:
私はすべてを試しました(nil、OSX::NULL、OSX::nil、null()、NULLなどを含む)。
誰でも私を助けることができますか?ありがとう。
c - C 関数呼び出しに対するカスタム X86_64 呼び出し規約
X86_64アセンブリコードからC関数への呼び出し規約を使用して、他の呼び出し規約で呼び出しを許可するインターフェイス(ラッパーなど)を作成する必要があります。最善の方法は、かなり「コンパイラに依存しない」ことです(ラッパーを変更するだけです)ので、レジスタ/スタックをコンパイラに戻すものを探しています。私はすでにここを見てきました: P/Invoke と C#のカスタム呼び出し規約。現在、私は GCC を使用していますが、他のコンパイラからのヒントは大歓迎です!
したがって、問題を最もよく理解するために、次のことを示します(カスタムコーディング規則は奇妙です):
「特別な」(ラッパー) C 関数を呼び出せるようにする必要があります。ここでの仕事は、他の C 関数間の呼び出しをディスパッチすることです。そのため、このラッパーは %r11 を見つけ、すべてのレジスタを保存し、さらに呼び出すためにスタックを準備する必要があります。Cでこれを行う適切な方法はありますか(インラインasmを使用)?
どうもありがとう
iphone - iPhone libffiには脱獄が必要ですか?
libffiを使用したiPhoneOS用のapp-store-approvableアプリを作成したいと思います。これは許可されていますか?NSInvocationのようなものでそれを使用するすべての部分をそれほど問題なく書き直すことができますが、libffiを好むでしょう。だから私の質問は:libffiを使用するアプリはアプリストアから拒否されますか?
python - IntelコンパイラとPython/ctypes / libffi
Intelコンパイラ(11.1)を使用してctypesを使用してPythonの動作バージョンを構築するのに問題があります。問題は、たとえばOpenGLとのインターフェース時に、ctypesモジュールの下のlibffiが正しく機能しないことです。
もともと、libffiは定義されていないインテル®コンパイラーを使用してコンパイルしませんでした__int128_t
。私はいくつかの場所にリストされている回避策に従いました。つまり、新しいタイプを定義しました。
typedef struct { int64_t m[2]; } __int128_t;
これは、Intelからの応答に従います:http ://software.intel.com/en-us/forums/showthread.php?t = 56652
次に、パッチは次のようなものを提案します。
パッチを適用すると、物事はコンパイルctypes
され、インポートできるようになりますが、OpenGLとのインターフェースでは、物事は機能しません。PyQtのサンプルプログラムを実行hellogl.py
すると、空白のビューが表示されます。
これを行うためのより良い、実用的な方法はありますか?
ダン;
64-bit - Mac OS X Snow Leopard で Io がコンパイルされない
README の指示に従いました。非常に簡単です。
この問題は、make install コマンドの後で発生します。モジュール CFFI が原因で、Io はコンパイルされません。ld は、私の libffi.dylib が 64 ビットではないため、.o ファイルをリンクしないと不平を言います。そのため、これまたはそのシンボルが定義されていないなどと不平を言います。
どうすればこれを解決できますか? make、cmake、またはファイルを編集するためにパラメーターを渡すことによって、32 ビットで Io をコンパイルする方法はありますか? Makefile には、CFFI アドオンのエントリがあります。削除してもいいですか?64 ビットの libcffi はどこで入手できますか? このライブラリは、高水準言語の低水準関数呼び出しにアクセスするための API を提供するため、私の 32 ビットのものを 64 ビットのものに置き換えることについては確信が持てず、私の MacRuby やその他のものを壊す可能性があります。CFFI と、私のシステムで動作する可能性のあるすべてのアドオンを使用して、より多くのことを実行できるようにしたいと考えています。目的の C バインディングに興味があります。
gcc - LibffiはCortex-M3用にビルドできますか?
GCCを使用してCortex-M3プロセッサ用の外部関数インターフェイスライブラリを構築しようとしています。http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.htmlによると:
-mthumbThumb
命令セットのコードを生成します。デフォルトでは、32ビットのARM命令セットを使用します。このオプションは、-mcpu=nameおよび-march=nameオプションに基づいて、16ビットThumb-1または混合16/32ビットThumb-2命令のいずれかを自動的に有効にします。このオプションはアセンブラーに渡されません。アセンブラファイルをThumbコードとして強制的に解釈する場合は、ソースに `.thumb'ディレクティブを追加するか、-mthumbオプションの前に-Waを付けてアセンブラに直接渡します。
さまざまな引数をアセンブラに渡してみましたが、理解できないようです。次のような典型的な出力:
ビルドファイル: ../ source / ffi / sysv.S呼び出し
:GCCアセンブラ
arm-bare_newlib_cortex_m3_nommu-eabi-gcc -Wa、-mthumb-interwork -I "/ home / neil / m3projects / robovero /firmware / include" -o " source / ffi / sysv.o "" ../source/ffi/sysv.S "../source/ffi/sysv.S
:アセンブラメッセージ: ../ source / ffi / sysv.S:
145:エラー:選択済みプロセッサはARMオペコードをサポートしていません
../source/ffi/sysv.S:147:エラー:ThumbのみのプロセッサでARM命令を使用しようとしました-`stmfd sp!、{r0-r3、fp、lr} '
..。。
アセンブリのエキスパートになることなく、Cortex-M3でlibffiを使用できますか?
arm-bare_newlib_cortex_m3_nommu-eabi-を直接呼び出すと、さまざまなエラーが発生することに注意してください。
firefox-addon - Javascript 文字列から C++ char ポインタ - JSCTypes の LPSTR バッファ
JSCTypes を使用して JavaScript から DLL にアクセスしています。次の API に文字バッファーを渡してデータを受信する必要がありますが、
私のjsctypesは次のようになります。
上記のコードで、最初は正しくデータを受信できましたが、2 回目以降の受信関数呼び出しで xulrunner がクラッシュします。Windowsで利用可能な一般的なDLLを使用して、この問題を再現しようとしました。これにより、キャッチされない例外がスローされます: TypeError: ctypes.char.array(500).address is not a function
アドレス API 呼び出しをドロップして、以下のように試してみると、
C++ 配列はポインターと見なされますが、この問題に遭遇します。
「キャッチされていない例外: TypeError: 予想される型ポインター、ファイル内の ctypes.char.array(640000) を取得しました」行 0、列 0
dll のソース コードにアクセスできません。DLL のインクルード ファイル (.h) しかありません。私は Java 開発者ですが、ソース コードなしでデバッグできるかどうかわかりません。