2011-03-31 4 views
0

파이썬 소켓 개체를 void 포인터로 변환 할 수있는 방법이 있습니까? 나는 ctypes를 사용하고 있으며 캐스트와 파이썬의 변환 함수를 사용해 보았습니다.PYTHON 소켓 및 구조

저는 또한 DLL을 사용하고 있으며 인수로 구조를 취하는 함수가 있습니다. 하지만 함수에 구조체를 전달할 때 잘못된 매개 변수가 오류로 표시됩니다. C 타입 매개 변수를 취하는 C에서 생성 된 C DLL에 대해 python을 사용하는 데있어서 단점이 있습니까?

+0

가능한 복제본 [소켓 프로그래밍] (http://stackoverflow.com/questions/5547895/ 소켓 프로그래밍) – ThiefMaster

답변

0

소켓을 포인터로 변환 할 충분한 이유가 없습니다. socket.fileno()을 사용하여 C 코드에서 사용할 수있는 소켓의 파일 설명자를 가져올 수 있습니다.

라이브러리에서 포인터를 예상하는 경우 ctypes 구조체로 래핑해야 할 수도 있지만 자세한 내용은 알지 못합니다.

+0

라이브러리는 실제로 void에 대한 포인터에 대한 포인터를 허용합니다. C에서는 포인터를 역 참조하기 쉽습니다. C 함수는 -> long UNILIB_CALL UL_cbOpen (void ** psocket, char * ipAddress, unsigned int port, int connectionTimeout, int sendTimeout, int recvTimeout)입니다. UNILIB_CALL은 __stdcall입니다. 이것은 콜백 함수입니다. 파이썬 코드는 여기에 있습니다 -> libc = WinDLL ("Unilib.dll"); ulopen = WINFUNCTYPE (c_long, POINTER (c_void_p), c_char_p, c_uint, c_int, c_int, c_int); 함수 선언은 다음과 같습니다. UL_cbOpen (psocket, ipAddress, port, connectionTimeout, sendTimeout, recvTimeout) : –