ctypes에서 python 함수를 callback 함수로 사용하기 위해서는 CFUNCTYPE을 사용해야한다

ctypes documentation에 나온 사용방법은 아래와 같다


1
2
3
4
5
6
from ctypes import *
 
def py_callback(mystr):
    pass
 
callback = CFUNCTYPE(c_int, POINTER(c_char))(py_callback)
cs


C 함수에 function pointer를 전달할 때 py_callback을 전달할 수는 없으므로

CFUNCTYPE을 이용해서 callback을 만들어 전달하면 된다

이때 CFUNCTYPE을 python decorator로 사용하여 더 간단하게 만들 수 있다


1
2
3
4
5
from ctypes import *
 
@CFUNCTYPE(c_int, POINTER(c_char))
def callback(mystr):
    pass
cs


---


cfunc는 arg, restype를 아래와 같이 설정할 수 있다

이 작업은 optional하지만, 디버깅을 쉽게만들어주는 효과를 줄것이다


callback.argtypes = [ ... ] # default: None

callback.restype = ... # default: c_long




WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/