Python 学習:ctypes 実用化

2014-05-20 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
3、2、2、1、0、 0、0、0、1、0(39)で、換算ポイント 63pt 。
遂に?「Python」昨日昼前に1位に躍り出た!
そして前日と同じパターン:
昨日朝方ダウンした「Firefox」が、昼前に3位にアップ。
尚「化学業界」今朝方4位にダウン。
・-・ - -・

さて、本文。

先日の記事:
Python 学習:ctypes 入門


実用化に向けては、・・・
そう、配列の受け渡しが必須。


例えば、

#include <type_def.h> // 自作

void Test( int x, int y, Byte *A, Byte *B ){
int n;
for( n=0; n<x; n++ ){
B[n] = (Byte)( 255 - (int)A[n] );
}
}


と定義されている関数が、ある“.dll”に有る場合

ここで、「type_def.h」の中身は、

#ifndef __TYPE_DEF_H__
#define __TYPE_DEF_H__

typedef unsigned char Byte;
typedef unsigned short Word;
typedef unsigned int DWord;

#endif


とする。


この「Test」関数を Python から、
“ctypes” を使って呼ぶ方法は???


例の「Stack Overflow」にあった。

Using array.array in Python ctypes

  double sum(double * array, const int length)

と定義されている場合、

  import ctypes
  lib = ctypes.CDLL( library_name )
  ・・・・・
  ret = lib.sum( ここはどう書く??? )

と云う質問ですね。

で、回答の0番は、

import numpy as np
data = np.arange( 101, dtype=ctypes.c_double ) # making this match seems important sometimes
print lib.sum( data.ctypes.data_as( ctypes.POINTER( ctypes.c_double ) ), len(data) )


ですね。

これで、学習。

・・・・・

<紙>の場合は、

import ctypes
k_lib = ctypes.CDLL( library_name )

import numpy as np
x = ・・・
A = ・・・
B = np.zeros( x, dtype=ctypes.c_ubyte )

k_lib.Test( x, A.ctypes.data_as( ctypes.POINTER( ctypes.c_ubyte ) ), B.ctypes.data_as( ctypes.POINTER( ctypes.c_ubyte) ) )


と云うことでよさそうですね。

テスト結果はOKでした。


因みに、他のデータ型の場合は???

C で、
  char、Byte、short、Word、int、Dword、int64_t、
  float、double
だったら、


Numpy では、
  int8、uint8、int16、uint16、int32、uint32、int64、
  float32、float64
(蛇足:Python のビルトイン型 整数型,浮動小数点型には np.int、np.float)


ctype では、
  c_byte、c_ubyte、c_short、c_ushort、c_int、c_uint、c_longlong、
  c_float、c_double


と、で対応させれば良い。


本日はここまで。

Python 学習は続く、・・・


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


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

コメントの投稿

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

おきてがみ/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
ブックマーク