Mam działający program Pythona 2.7, który wywołuje bibliotekę DLL. Próbuję przenieść skrypt do Pythona 3.2. Wydaje się, że wywołanie DLL działa (tzn. Nie ma błędu podczas wywoływania), ale zwrócone dane nie mają sensu.Różnice w ctypach między Pythonem 2 a 3
Na wszelki wypadek może być przydatny: - Połączenie ma trzy argumenty: dwa int (wejście) i wskaźnik do tablicy ushort (wyjście).
Próbowałem bez powodzenia używać zarówno python, jak i numpy array.
Czy ktokolwiek może wyliczyć różnice między Python 2.7 a 3.2 pod względem ctypów?
góry dzięki
EDIT
Oto przykład kodu. DLL jest własnościowy, więc nie mam kodu. Ale mam nagłówek C:
void example (int width, int height, unsigned short* pointer)
Kod Pythona:
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)
to działa w Pythonie 2.7, ale nie w 3.2.
EDIT 2
Jeśli zmiany w ctypes są tylko te wskazane przez Cedrica, to nie ma sensu, że Python 3.2 nie będzie działać. Patrząc ponownie na kod, stwierdziłem, że istnieje funkcja przygotowania wywoływana przed funkcją, o której wspomniałem. Podpis brzmi:
void prepare(char *table)
W Pythonie Wołam przez:
table = str(aNumber)
DLL.prepare(table)
Czy to możliwe, że problem jest spowodowany zmianą manipulacji ciąg Python?
Nie jestem świadom wszelkich różnic w ogóle. Myślę, że powinniśmy zobaczyć kod. –