路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

ctypesのお勉強 #2: ctypesでC++

2007-11-26 19:00:13 | プログラミング
クラスを定義するC++のコードをctypesから使いたい。
でもctypesでさわれるのはC言語の構造体まで。どうしよう。

とりあえずうまくいったのは、2段階でやる方法、すなわち、

C++のコードをラップするCのコードを書いて、それをctypesでさらにラップする方法。

コンストラクタ、デストラクタ、メソッドをラップするコードを書いてDLLを作る。

extern "C" {
void *MyClass_ctor(void) /* returns new instance */{ ... }
const char *MyClass_hogeMessage(void *pThis) { ... }
void MyClass_dtor(void *pThis) { ... }


さらに、Pythonのコードでこれをラップする。

mydll = ctypes.CDLL("hoge.dll")

class HogeClass(object):
 def __init__(self):
  self.v = ctypes.c_void_p(mylib.MyClass_ctor())
 def hogeMessage(self):
  return ctypes.c_char_p(mylib.MyClass_hogeMessage(self.v)).value
 def __del__(self):
  mylib.MyClass_dtor(self.v)

使うときには、

i = HogeClass()
print i.hogeMessage()

みたいにする。

まあ手間だけど、C言語からC++のコードを利用するときと同じだと思えば、これで満足すべきかなあ。

最新の画像もっと見る