2011-09-14 4 views
6

dll에서 내 함수에 액세스하려고하고 그 값으로 정수로 전달하려고합니다. 하지만이 같은 ValueError를 무엇입니까 :내 함수에서 너무 많은 인수 - 파이썬

func2.restype = c_int 
func2.argtypes = [c_int] 
func2(3) 

... dll을에서

내 실제 기능과 같은 단순한 기능입니다 :

Procedure probably called with too many arguments (4 bytes in excess) 

내 파이썬 평 스크립트은 다음과 같습니다 :

int DLLfun2(int argtest) { return argtest + 1; }; 

...

간단한 문제처럼 보이지만, 나는 뭔가를 놓치고 있다고 생각합니다. 친절하게 도와주세요.

건배.

답변

3

정수가 자동으로 캐스팅해야하기 때문에 이상한 보이는,하지만 func2(c_int(3))

편집으로 시도 : 을 ctypes doc에 따르면,이 예외가 (cdecl을 대신하고 stdcall의) 때문에 잘못된 호출 규칙의 제기 될 수있다. 그러나 함수는 여전히 호출됩니다 (경고 일종의)

dll에 선언해야합니다.

windll으로 라이브러리를로드하는 경우 stdcall 호출 규칙을 사용해야하며, 그렇지 않으면 cdll 모듈을 사용해야합니다.

+0

불행히도 같은 오류가 발생했습니다. – Neophile

+1

@ Nerds.Dont.Swear : 내가 편집에서 언급 한대로 dll에서 사용중인 호출 규칙 (cdecl/stdcall)을 살펴보십시오. –

+0

제 경우에는 windll을 사용하여 라이브러리를로드하고 있습니다. 내 기능을 부르려는 방식과 다른 점은 무엇입니까? – Neophile