Python 学習:CFFI 入れてみた

2014-05-25 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
3、2、2、1、0、 0、0、0、0、0(39)で、換算ポイント 62pt 。
「グルコサミン」昨日昼頃、1位に返り咲いた。
・-・ - -・

さて、本文。

2週間前(2014-05-17)の記事:
Python 学習:Python to/from C
で、参照した、
PythonのC言語拡張モジュール作成ガイド
にある「CFFI」について、
試しに入れてみた。

「WinPython」には入っていないので、

「CFFI 0.8.2 documentation」の、
CFFI documentation
に従って、
DOSプロンプトで、
  pip install cffi
と打ち込むと、インストールできた。

そこで、
“WinPython Interpreter.exe”
を立ち上げて、

このドキュメント・ページの
  Examples
  Simple example (ABI level)
の8行

from cffi import FFI
ffi = FFI()
ffi.cdef("""
int printf(const char *format, ...); // copy-pasted from the man page
""")
C = ffi.dlopen(None) # loads the entire C namespace
arg = ffi.new("char[]", "world") # equivalent to C code: char arg[] = "world";
C.printf("hi there, %s!\n", arg)



打ち込んだ。
OK ですね。


次に、
日本語のページ:「PythonのC言語拡張モジュール作成ガイド」

  直接Cのコードを記述する
  cffi.FFI.verify を使用することでCのコードを直接記述し、呼び出す。
  以下がその例です。

from cffi import FFI

ffi = FFI()
ffi.cdef("""
void hello(void);
int fact(int n);
""")

_C = r"""
#include

void hello(void)
{
printf("Hello World!!\n");
}

int fact(int n)
{
int i;
int ret=1;
for (i=n; i>0; i--) ret *= i;

return ret;
}
"""
lib = ffi.verify(_C)
lib.hello()
print lib.fact(5), lib.fact(10)


と云う例と、
次の、
  変数や構造体を使う
  cffi.FFI.cdef に直接構造体(struct)定義を記述し、 cffi.FFI.new 経由で変数を使用。
  ・・・・・
  ・・・・・
をコピー&ペーストして実行。

出来ました。

以前の“ctypes”の自作例:
Python 学習:ctypes 入門
の「test_dll.py」相当を作ってみた。

from cffi import FFI

ffi = FFI()
ffi.cdef("""
int Add( int x, int y );
""")
libc = ffi.dlopen("./test_dll.dll")

print libc.Add( 5, 6 )
_ = raw_input()


OKダ。

これだと、“ctypes”も“CFFI”も
一緒ですね。
若干、Cのプロトタイプ宣言相当の分記述量が多くなる。

結論。

“CFFI”は要らない。
“ctypes”で充分。


本日はここまで。

Python 学習は続く、・・・


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140506
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク