2010-04-28 7 views
6

CFuncType (ctypes.CFUNCTYPE 또는 ctypes.PYFUNCTYPE ...) 콜백 함수를 전달해야합니다.Python에서 CFuncType을 만드는 방법

어떻게 파이썬 함수를 CFuncType으로 캐스팅 할 수 있습니까? 아니면 어떻게 파이썬에서 CFuncType 함수를 만들 수 있습니까?

다음

그래서 우리의 콜백 함수는 정수에 대한 포인터를 수신 http://docs.python.org/library/ctypes.html에서 복사하고 정수를 반환해야합니다 :

답변

8

내가 얼마나 멋진하는 ctypes 잊어 버렸습니다. 먼저 우리가 콜백 함수에 대한 유형 작성 : 콜백 함수의 첫 번째 구현을 위해

CMPFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int)) 

을, 우리는 단순히 ;-) 우리가 얻을 인수를 인쇄하고 0 (증분 개발을 반환 :

def py_cmp_func(a, b): 
    print "py_cmp_func", a, b 
    return 0 

C 호출 가능 콜백 만들기 :

cmp_func = CMPFUNC(py_cmp_func) 
+0

아, 그래! 방금 그 트릭을했습니다. 감사. 해당 cpm_func을 ctypes.structure에 전달합니다. '콜백', ctypes.CFUNCTYPE (c_int, POINTER (c_int), POINTER (c_int)) – manson54

+0

콜백의 반환 유형이 ' 무효'? 'CFUNCTYPE'의 첫 번째 인수로 지정할 c_void가 없습니다. – Shahbaz

+0

[this] (https://gitorious.org/telldus/telldus/commit/1108f3fad26f744c2418d22a547a17669522ce2e)에서 '없음'을 사용해야합니다. – Shahbaz

관련 문제