2009-05-17 3 views
1

이것은 my other question과 관련되어 있지만 새로운 질문으로 질문해야 할 것 같았습니다.파이썬 ctypes 및 함수 포인터

기본적으로 FLAC은 콜백 함수 포인터를 사용하고 ctypes 콜백을 구현하려면 CFUNCTYPE을 사용하여 프로토 타입을 작성한 다음 prototype() 함수를 사용하여 만듭니다.

나는이 함께이 문제는 내가 같은 내 콜백 함수 (내가 다시 한 구조를 보여주는 아니에요, FLAC__Frame는 구조입니다)를 만들 것이라고 생각이다

:

write_callback_prototype = CFUNCTYPE(c_int, c_void_p, 
            POINTER(FLAC__Frame), 
            POINTER(c_int32), v_void_p)

문제를 내가 가진 것은 구현입니다. FLAC__Frame은 프로그래머에 의해 결코 인스턴스화되지 않습니다, 그것은 단지 초기화 함수에서 호출되었고, 처리 함수입니다. 콜백 함수를 직접 작성해야하지만, 그는 문제가됩니다. 내가 어떻게해야하는지 알면, 도움이 될 것입니다.

답변

5

ctypes callback docs에 따르면 당신은

def my_callback(a, p, frame, p1, p2) 
    pass 

를 파이썬 함수를 정의하고이 같은 C 호출 함수에 대한 포인터 만들 수 있습니다 :이 함수 포인터가 다음 FLAC

로 전달 될 수

callback = write_callback_prototype(my_callback) 

+0

고맙습니다. 코드를 통해 내가 어떻게 만들어야하는지 알게되었습니다! – Bocom

1

문제는 구현입니다. FLAC__Frame은 프로그래머에 의해 결코 인스턴스화되지 않습니다, 그것은 단지 초기화 함수에서 호출되었고, 처리 함수입니다. 콜백 함수를 직접 작성해야하지만, 그는 문제가됩니다. 내가 어떻게해야하는지 알면, 도움이 될 것입니다.

import ctypes 

class FLAC__Frame(ctypes.Structure): 
    pass 

을하고 이미 정의되어 척, 당신은 기본적으로 메모리에 위치되는, 그것에 대한 포인터를 필요로하기 때문에 걱정하지 않는다 :이 경우

, 그냥 사용합니다.