2011-10-25 2 views
3

나는 오랫동안 SWIG를 사용 해왔다 - 일반적으로 나는 그것을 좋아한다. 그러나 ctypes를 사용하면 콜백 함수를 사용하는 것이 훨씬 쉬워 보입니다.ctypes와 swig를 결합

어떻게 C DLL과 상호 작용하는 두 가지 "방법"을 결합 할 수 있습니까?

첫 번째 단계는 DLL이 이미 해당 SWIG 모듈 가져 오기를 통해로드 된 후 ctypes 개체를 DLL로 가져 오는 방법을 알아야합니다.

감사합니다.
세 바스 챤.

답변

0

버퍼 프로토콜이 최선의 방법 일 수 있습니다 (http://docs.python.org/c-api/buffer.html).

C 코드 (예 : swig 생성 코드)에서이 인터페이스에 액세스하여 기본 C 데이터에 대한 포인터를 얻을 수 있습니다.

버퍼 인터페이스에는 두 가지 버전이 있습니다. 파이썬 2.x의 ctypes 객체는 파이썬 3.x에서 새 프로토콜을 노출하는 이전 프로토콜을 노출합니다.

당신은 파이썬 C API 레벨로 가야하지만, 모든 것을 멋지게 감쌀 경우 한 번만해야합니다. 예를 들어 % 인라인 함수가 버퍼 프로토콜을 지원하는 모든 것을 void *로 반환하고 typemaps 귀하의 콜백 유형. x.pyd이 꿀꺽 꿀꺽 컴파일 된 확장 모듈 인 경우

0

는, 당신은 이런 식으로하는 ctypes를 통해 DLL을로드 할 수

import x 
from ctypes import PyDLL 
dll = PyDLL(x.__file__) 

을 내 보낸 함수가 사용하는 호출 규칙에 따라 사용해야 할 수도 있습니다 PyDLL, WinDLL 또는 CDLL.

관련 문제