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
'Language > python' 카테고리의 다른 글
[python] list in for-loop syntax (+tuple) (0) | 2017.11.29 |
---|---|
[python] pip error: Command "python setup.py egg_info" failed with error code 1 (0) | 2017.11.27 |
[python] converting bytes to ctypes.c_short array (0) | 2017.11.26 |
[python] beautifulsoup4 example (0) | 2017.11.26 |
[python] get html (urlopen) best way (0) | 2017.11.26 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/