2011-10-25 3 views
2

ctypes 패키지를 사용하여 64 비트 파이썬에서 msvcrt 함수를 호출하려고합니다. 나는 분명히 그것을 잘못하고있다. 그것을 명백하게하는 올바른 방법입니까?64 비트 파이썬 ctypes에서 msvcrt 사용

Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win 
32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import ctypes 
>>> libc = ctypes.cdll.msvcrt 
>>> fp = libc.fopen('text.txt', 'wb') #Seems to work, creates a file 
>>> libc.fclose(ctypes.c_void_p(fp)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
WindowsError: exception: access violation reading 0xFFFFFFFFFF082B28 
>>> 

이 코드가 원하는대로 수행하면 충돌없이 텍스트 파일을 열고 닫을 수 있습니다.

답변

5

결과 유형 ctypes는 32 비트 정수이지만 파일 핸들은 포인터 폭, 즉 64 비트입니다. 따라서 파일 포인터의 정보 중 절반이 손실됩니다.

libc.fopen.restype = ctypes.c_void_p 
fp = libc.fopen(...) 
libc.fclose(fp) 
+0

니스 :

은 전화를하기 전에 결과 유형은 포인터임을 명시해야 fopen의! 감사! 이것은 실제로 문제였습니다. – Andrew

관련 문제