2011-09-14 11 views
6

Estoy intentando acceder a mi función en un dll y pasar el valor como un entero en ella. Pero me estoy haciendo un ValueError como:Demasiados argumentos en mi función - Python

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

Mi script en Python .py es la siguiente:

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

...

Mi función real en la DLL es sólo una función simple como :

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

...

Parece un problema simple, pero supongo que me estoy perdiendo algo. Amablemente ayuda.

Saludos.

Respuesta

3

ve raro porque número entero sea echado de forma automática, pero trata con un EDITAR func2(c_int(3))

: De acuerdo con la ctypes doc, esta excepción podría elevarse debido a una convención de llamada equivocada (cdecl en lugar de stdcall). Pero la función todavía se llama (sólo una especie de advertencia: s)

Asegúrese de su declaración en su dll.

Si carga su biblioteca con windll, debe usar la convención de llamadas stdcall; de lo contrario, utilice el módulo cdll.

+0

Disfrútelo, el mismo error lamentablemente. – Neophile

+1

@ Nerds.Dont.Swear: eche un vistazo a la convención de llamadas que está usando (cdecl/stdcall) en su dll como mencioné en mi edición. –

+0

En mi caso, estoy usando windll para cargar mi biblioteca. ¿Cómo sería diferente de la forma en que trato de llamar a mi función? – Neophile

Cuestiones relacionadas