2011-09-14 22 views
6

Próbuję uzyskać dostęp do mojej funkcji w bibliotece dll i przekazać wartość jako liczbę całkowitą w nim. Ale ja dostaję ValueError jak:Zbyt wiele argumentów w mojej funkcji - Python

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

mój skrypt Pythona .py jest jak poniżej:

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

...

Moja rzeczywista funkcja w DLL jest tylko prosta czynność jak :

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

...

Wygląda na prosty problem, ale domyślam się, że czegoś mi brakuje. Uprzejma pomoc.

Pozdrawiam.

Odpowiedz

3

wygląda dziwnie, ponieważ całkowita powinna zostać automatycznie rzucić, ale spróbuj z func2(c_int(3))

EDIT: Według ctypes doc wyjątek ten może zostać podniesiony z powodu złej wywołującego konwencji (cdecl zamiast STDCALL). Ale funkcja jest nadal wywoływana (tylko rodzaj ostrzeżenia: s):

Pamiętaj o swojej deklaracji w bibliotece dll.

Jeśli załadujesz bibliotekę z windll, musisz użyć konwencji wywoływania stdcall, w przeciwnym razie użyj modułu cdll.

+0

Udało się, niestety ten sam błąd. – Neophile

+1

@ Nerds.Dont.Swear: spójrz na konwencję wywołującą, której używasz (cdecl/stdcall) w swojej bibliotece DLL, tak jak wspominałem w mojej edycji. –

+0

W moim przypadku używam windll do załadowania mojej biblioteki. Czym różni się od sposobu, w jaki próbuję nazwać moją funkcję? – Neophile

Powiązane problemy