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

0 投票する
5 に答える
10346 参照

python - Numpy 配列を cffi 関数に渡す方法と、それを元に戻す方法は?

Python と Numpy を使用してオーディオ アルゴリズムを開発しています。ここで、そのアルゴリズムの一部を C で実装することにより、そのアルゴリズムを高速化したいと考えています。以前は、cython を使用してこれを実行しました。今度は、新しいcffiを使用して同じことをしたいと思います。

テスト目的で、単純な C 関数を作成しました。

ここで、2 つの numpy 配列を作成し、それらをこの関数で処理したいと考えています。私はそれを行う方法を見つけました:

ただし、このコードを改善したいと思います。

  1. それらをコピーせずに、numpy 配列の基になる浮動小数点バッファーに直接アクセスする方法はありますか?
  2. ffi.bufferC 配列の内容を Numpy 配列にすばやく変換するのに非常に便利です。個々の要素をコピーせずに、numpy 配列を C 配列にすばやく変換する同等の方法はありますか?
  3. 一部のアプリケーションでfloat_in[0:16] = arr_in[0:16]は、データにアクセスする便利な方法です。ただし、その逆はarr_out[0:16] = float_out[0:16]機能しません。なぜだめですか?
0 投票する
1 に答える
5827 参照

python - Python-C 統合: Ctypes、CFFI、またはバイナリ モジュールの作成

基本的には、Python プログラムで C で記述された関数を呼び出したいと考えています。

だから(私が知る限り)私のオプションは次のとおりです。

  • CTypes/ CFFI
    • C 関数を含む DLL/SO/DyLib を作成し、 CTypes またはCFFIを使用してそれらにアクセスします。どうやらCFFIの方がはるかに高速ですが、すべての関数シグネチャを Python で宣言する必要があるという唯一の欠点があります。
    • 長所:
      • 私の C 関数に適応させる必要はありません。すべての型変換は Python で行われます。
    • 短所:
      • パフォーマンス ?
  • Python バイナリ モジュール
    • C で Python インターフェイスを作成し、C モジュールをバイナリ Python モジュールに変換します
    • 長所:
      • パフォーマンス ?
    • 短所:
      • すべての型変換は C で行われます。[SIP][3] を使用すると、これが自動化される場合があります。

C モジュールを Python バイナリ モジュールに変換した方が本当に速いですか?

どちらのソリューションも、C 関数への Python コールバックの送信をサポートしていますか?

SIP は Python インターフェイスを生成するための適切なオプションですか? 他にオプションはありますか?

それらのいずれかに他の特徴はありますか?

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

python - Python CFFI + 7z.dll (COM) == アクセス違反 (時々)

コードを最小限のユースケースに短縮しました。

スクリプトは常に完了しますが、約 50% の確率でメモリ アクセス違反/クラッシュが発生します。

これは、Windows 7 で 64 ビットの Python 3 を使用しています。

このコードは、7zip のすべてのハンドラーをループして、それらがサポートする拡張機能を示すことになっています (スペースで区切られたリスト、空である可能性があります... VT_EMPTY ではなく、bstrVal=L"" のみ)。

厄介なことに、同等のctypesコードは問題なく動作するようです。

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

python - cffi で __cdel 装飾関数を呼び出す方法は?

こんにちは @eryksun と Python の専門家:

cffi次のコマンドを使用して、dll ファイルを python にインポートしようとしています。

ctypesに関する以前の質問から、DLLはすべて cdeclであることがわかり(@eryksun のヒントのおかげで)、次の方法でその関数にアクセスできました。

ただし、cffi で同等の操作が何であるかはわかりません。lib._InitializeBIRDSystemctypes で動作しますが、cffi では動作しません。なにか提案を?

ご検討いただきありがとうございます。

エリック

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

python - Python CFFI で time_t フィールドを含む構造体を宣言する

CFFI を使用して、構造体を返す Python から C 関数を呼び出しています。構造体は要素で定義されtime_tます。Python からアクセスできるように、構造体を CFFI に宣言するにはどうすればよいですか?

たとえば、次のことを試しました(ファイルの変更時刻を取得するため):

これによりエラーが発生します。

行をコメントアウトした後にコンパイルしますが、もちろんフィールドtime_t tv_sec;にアクセスすることはできません。tv_secおそらく、CFFI の C パーサーは typedef をサポートしていません。time_t異なるプラットフォームでは型が異なる可能性があるため、実際の型に置き換えることはできません。

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

android - Python と Dalvik または AAF 間のネイティブ ブリッジ

同じアドレス空間で Python と Dalvik を橋渡しするプロジェクトはありますか?

ある言語で作成されたオブジェクトを別の言語でリスナーとして登録できます。また、その逆も可能です。

--

Python は CPython または PyPy です。

Dalvik は完全な Android アプリケーション フレームワークである場合もあれば、Dalvik 仮想マシンのみである場合もあり、最悪の場合、Dalvik 以外の JVM である場合もあります。

Bridge は、Python/cffi、Python/jni、ネイティブ C/C++ コード、さらには Java で記述できます。

私が理解している限り、スクリプト環境は私が望んでいることをしません。

Python--Dalvik ブリッジがまったくない場合は、フル機能の C/C++ ベースの C/C++--Dalvik ブリッジを最後の手段として有効な回答として使用します。次に、セキュリティの考慮事項を含め、実行時に一部の Android API に有効なリスナーとして送信できる C/C++ ランドで on オブジェクトをインスタンス化する例が必要です。

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

python - dll の読み込み時に Python CFFI モジュールが失敗する: OSError 0x7e

Windows 7、64 ビットで Python 3.3 (Anaconda ディストリビューション) を実行しています。私は Weasyprint app/library をインストールしようとしましたが、これには CFFI を含む多くの依存関係があり、互換性のあるバージョンがバイナリ配布で利用できなかったため、ソースからコンパイルする必要がありました。

weasyprint を実行すると、インポート ロード プロセス中、特に Cairo 用の GTK+ ライブラリ dll をロードするために CFFI を呼び出すときにチョークします。私が得るエラーは次のとおりです。

私が持っている環境は次のとおりです。Windows 7.1 64ビット、Python 3.3 64ビット、64ビット環境のVisual Studio 2010で(私が)コンパイルしたCFFI、およびカイロのlibcairo-2.dllも64ビットバージョンです.

私は Windows プログラマーではなく、Weasyprint を別の (Python 言語) プロジェクトで動作させたいため、この混乱を掘り下げているだけです。私はずっと前に Delphi で Windows プログラミングを少し行ったことがあります。そのため、これがどのように機能するかについては漠然としていますが、この問題を解決することはできませんでした。

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

python - Python CFFI 構造を辞書に変換

辞書で構造を初期化する方法があります。

変換を行う準備ができている関数はありますか?

自分で ffi.typeof("foo_t").fields を使用する必要がありますか?

これまでのところ、このコードを思いつきました:

もっと速い方法はありますか?