ArgumentError when using numpy.ctypeslib.ndpointer
Hello, I am unable to get the simple numpy.ctypeslib.ndpointer docstring example from <http://docs.scipy.org/doc/numpy/reference/routines.ctypeslib.html> working on Windows. Given a DLL `foo.dll` that exports a function `int bar(double *)`, calling foo.bar using the np.ctypeslib.ndpointer approach always fails with a ctypes.ArgumentError: In [5]: foo = ctypes.CDLL('foo.dll') In [6]: foo.bar.argtpes = [np.ctypeslib.ndpointer(dtype=np.float64, ndim=1, flags='C_CONTIGUOUS')] In [7]: a = np.array([1, 2, 3], dtype=np.float64) In [8]: foo.bar(a) ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1 This works as expected: In [9]: c_double_p = ctypes.POINTER(ctypes.c_double) In [10]: foo.bar.argtpes = [c_double_p] In [11]: foo.bar(a.ctypes.data_as(c_double_p)) Out[11]: 0 What am I missing? I also tried ndpointer(), several numpy and Python versions, real DLLs, and argument types. A self contained script is attached. Thank you, Christoph
11.03.2012 09:09, Christoph Gohlke kirjoitti:
I am unable to get the simple numpy.ctypeslib.ndpointer docstring example from <http://docs.scipy.org/doc/numpy/reference/routines.ctypeslib.html> working on Windows.
Given a DLL `foo.dll` that exports a function `int bar(double *)`, calling foo.bar using the np.ctypeslib.ndpointer approach always fails with a ctypes.ArgumentError:
In [5]: foo = ctypes.CDLL('foo.dll') In [6]: foo.bar.argtpes = [np.ctypeslib.ndpointer(dtype=np.float64, ndim=1, flags='C_CONTIGUOUS')]
Typo: "argtpes" -> "argtypes" Probably not Windows-specific :) -- Pauli Virtanen
On 3/11/2012 4:33 AM, Pauli Virtanen wrote:
11.03.2012 09:09, Christoph Gohlke kirjoitti:
I am unable to get the simple numpy.ctypeslib.ndpointer docstring example from <http://docs.scipy.org/doc/numpy/reference/routines.ctypeslib.html> working on Windows.
Given a DLL `foo.dll` that exports a function `int bar(double *)`, calling foo.bar using the np.ctypeslib.ndpointer approach always fails with a ctypes.ArgumentError:
In [5]: foo = ctypes.CDLL('foo.dll') In [6]: foo.bar.argtpes = [np.ctypeslib.ndpointer(dtype=np.float64, ndim=1, flags='C_CONTIGUOUS')]
Typo: "argtpes" -> "argtypes"
Probably not Windows-specific :)
Thank you! Funny enough, I had this typo all over in a wrapper for a real DLL, but all the unit tests (about a hundred) passed... Christoph
participants (2)
-
Christoph Gohlke -
Pauli Virtanen