ちょっとした学習経験として、SDL (1.2.14) のいくつかの部分を Python 3.2 の拡張機能として Cython にラップしようとしています。
C 構造体を Python に直接ラップする方法を理解するのに問題があり、次のようにその属性に直接アクセスできます。
struct_name.attribute
たとえば、構造体 SDL_Surface を使用します。
typedef struct SDL_Rect {
Uint32 flags
SDL_PixelFormat * format
int w, h
Uint16 pitch
void * pixels
SDL_Rect clip_rect
int refcount
} SDL_Rect;
そして、Pythonで次のように使用できるようにします。
import SDL
# initializing stuff
Screen = SDL.SetVideoMode( 320, 480, 32, SDL.DOUBLEBUF )
# accessing SDL_Surface.w and SDL_Surface.h
print( Screen.w, ' ', Screen.h )
今のところ、SDL_SetVideoMode と SDL_Surface をこのように SDL.pyx というファイルにラップしました。
cdef extern from 'SDL.h':
# Other stuff
struct SDL_Surface:
unsigned long flags
SDL_PixelFormat * format
int w, h
# like past declaration...
SDL_Surface * SDL_SetVideoMode(int, int, int, unsigned )
cdef class Surface(object):
# not sure how to implement
def SetVideoMode(width, height, bpp, flags):
cdef SDL_Surface * screen = SDL_SetVideoMode
if not screen:
err = SDL_GetError()
raise Exception(err)
# Possible way to return?...
return Surface(screen)
SDL.Surface をどのように実装すればよいですか?