2012-04-20 2 views
0

this guide 다음에 나오는 Python에서 dll에 액세스하려고합니다. 내가 dll에서 시도하고 호출하는 첫 번째 함수는 제대로 작동하는 것 같습니다. 따라서 대부분의 방법으로 사용해야하지만 두 번째 함수는 액세스 위반을 발생시킵니다.Python ctypes access violation

파이썬 코드 : 나는 제로 (핸들)을 호출 할 때

#create open function 
openProto = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_void_p) 
openParams = (1, "handle", 0) , 
open = openProto (("SensorOpen", pm), openParams) 

#create zero function 
zeroProto = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_int) 
zeroParams = (1, "handle", 0), 
zero = zeroProto (("SensorZero", pm), zeroParams) 

handle = ctypes.c_int (0) 
status = ctypes.c_int (0) 
open(ctypes.byref(handle)) 
print handle 
zero(handle) 

액세스 위반이 발생합니다. 이 작업을 수행

는 C++ 코드는 여기에 있습니다 : SENSOR_HANDLE는

SENSOR_HANDLE seHandle; // Sensor handle 
double   power; 
char   buff[80]; 

// Get handle for sensor 
SensorOpen (&seHandle); 

printf ("Sensor connected\nZeroing, please wait...\n"); 
while (SensorZero (seHandle) == SENSOR_ZERO_FAILED) 
{ 
    printf ("Zero failed.\nCheck no power is being applied.\nPress return key to retry "); 
    gets (buff); 
} 

그냥 typedefint

어떤 아이디어 거라고? 반환 된 값으로 아무 것도하지 않는 것이 좋습니다.

+0

"SOLVED"는 아무 곳에 써서도 안됩니다. 그 대답은 받아 들여지는 것입니다. 문제를 해결했다면 직접 솔루션을 작성하십시오. –

+1

다른 예를 찾으십시오. 그것은 ctypes를 사용하는 것이 가장 혼란스러운 방법입니다. http://stackoverflow.com/a/4353259/235698을 방문하십시오. –

+0

@AlexanderR 2 일 동안 내 자신의 솔루션을 올바른 것으로 표시 할 수 없었으며 필요하지 않다는 것을 깨닫기 위해 전체 질문을 읽게하여 다른 사람의 시간을 낭비하고 싶지 않았습니다. 나는 그것을 지금 제거했다. – TheLastBert

답변

0

문제가 해결되었습니다.

C++ 코드는 몇 가지 문서와 함께 제공되는 샘플 코드입니다. 말할 필요도없이 샘플 코드와 문서가 올바르지 않습니다 (제로 함수는 여전히 인수를 포인터로 사용하기를 원했습니다).

+0

답변을 남기고 다른 사람들을 도우려면 * 왜 * 그들이 틀렸는 지 언급하고 싶을 수도 있습니다. –