Tengo un programa en funcionamiento de Python 2.7 que llama a una DLL. Estoy tratando de portar el script a Python 3.2. La llamada DLL parece funcionar (es decir, no hay ningún error al llamar) pero los datos devueltos no tienen sentido.Diferencias en ctypes entre Python 2 y 3
Por si acaso podría ser útil: - La llamada toma tres argumentos: dos int (entrada) y un puntero a una matriz ushort (salida).
He intentado utilizar matrices python y numpy sin éxito.
¿Alguien puede enumerar las diferencias entre Python 2.7 y 3.2 respetando ctypes?
Gracias de antemano
EDITAR
Aquí es un código de ejemplo. La DLL es propietaria, así que no tengo el código. Pero tengo la cabecera C:
void example (int width, int height, unsigned short* pointer)
El código Python es:
width, height = 40, 100
imagearray = np.zeros((width,height), dtype=np.dtype(np.ushort))
image = np.ascontiguousarray(imagearray)
ptrimage = image.ctypes.data_as(ct.POINTER(ct.c_ushort))
DLL.example(width, height, ptrimage)
Esto funciona en Python 2.7, pero no en 3.2.
EDIT 2
Si los cambios en ctypes sólo aquellos señalado por Cedric son, no tiene sentido que Python 3.2 no funcionará. Entonces volviendo a mirar el código, descubrí que hay una función de preparación llamada antes de la función que menciono. La firma es:
void prepare(char *table)
en Python, llamo por:
table = str(aNumber)
DLL.prepare(table)
¿Es posible que el problema se debe al cambio en el manejo de cadenas de Python?
No estoy al tanto de cualquier diferencia en absoluto. Creo que necesitaríamos ver algún código. –