2012-12-13 1 views
2

다음은 시나리오입니다. ctypes를 사용하여 C DLL을 Python 프로그램에로드하고 있습니다. DLL의 코드가 파이썬에서 함수를 호출 할 수 있도록 콜백을 등록하려고합니다.DLL이이 함수를 콜백으로 호출 할 수 있도록 ctypes를 사용하여 가변 파이썬 함수의 프로토 타입을 만들 수 있습니까?

이 기능을 가변적으로 설정하기 전까지는이 모든 것이 훌륭합니다. 예를 들어, 내가 파이썬 "의 printf"을 구현하고 싶었 말 (인수를 위해서, 나는 또한 정수를 반환해야합니다) :

def printf(format, *args): 
    (...) 
    return 0 

내가하는 ctypes에 CFUNCTYPE 공장을 사용하여 콜백 함수 포인터를 만드는 오전를 :

callback_type = CFUNCTYPE(c_int, c_wchar_p) 
물론

, 나는 단지 하나 개의 입력 인수 (유니 코드 문자 배열과 형식 문자열)를 지정하기 때문에, 콜백 작동하지만 *args가 비어 있습니다.

그래서 ctypes로이 작업을 수행 할 수있는 방법이 있습니까? 아니면 variadic 콜백 함수가 필요하지 않도록 C 코드를 다시 작성해야합니까?

답변

2

아니요, 기본 libffi에서 지원되지 않습니다. 실제로 사용자 정의 C 코드를 작성해야합니다.

(FWIW가 CFFI 그것이 동일한 제한 겪고, 또한 libffi에 기초.하는 ctypes 대안 ---하지만 최소한의 인터페이싱을 수행하는 C 코드 정의 피스를 작성하기 쉽게 만든다.)

+0

CFFI에 대한 팁 주셔서 감사합니다! –

+0

CFFI의 설명서를 편집하여 C로 작성된 사용자 정의 콜백 예제를 가지며 파이썬을 다시 호출합니다. –

관련 문제