[Numpy-discussion] ctypes, numpy-array

Lars Friedrich lfriedri at imtek.de
Tue Jul 25 07:55:09 EDT 2006


> What's might be happening here is that a.ctypes.data is in fact being passed
> to your function via ctypes's from_param magic (check the ctypes tutorial
> for details).
> 
> In [10]: x = N.array([])
> 
> In [11]: x.ctypes.data
> Out[11]: c_void_p(15502816)
> 
> In [12]: x._as_parameter_
> Out[12]: 15502816
>  
OK, I did not know about x.ctypes.data...

> So what's probably happening here is that you already have a pointer to the
> array's data which you then cast to a PyArrayObject pointer. Dereferencing
> myPtr->data is looking for a pointer inside the array's data, which contains
> zeros.

I understand. 

> - look at ctypes's PyDLL option if you want to pass around Python objects

???

> - Write your function as:
> 
> int foo(int* x);
> 
> Then do something like this:
> 
> x = N.array([...], dtype=N.intc)
> mydll.foo.restype = None
> mydll.foo.argtypes = [POINTER(c_int)]
> mydll.foo(x.ctypes.data)

I did that, and it worked fine for me. Thank you very much! This is
really great.

Lars





More information about the NumPy-Discussion mailing list