goetzie wrote: > I am using Python 2.4.1 and Numeric 23.8 and running on Windows XP. I > am passing a Numeric array of strings (objects) to a C Extension module > using the following python code:
Numeric 23.8 is *very* old and unsupported. Unless you absolutely have to use Numeric (then use 24.2), NumPy is a better choice for new code. With that advice aside. Let's see... > > And here is the relevent code from my C Extension module: > > static PyObject * _StringArrayIn( PyObject *self, PyObject *args ) > { > PyObject *pObject; // input array > PyArrayObject *pArray; // contiguous array > int iCount; > int iStride; > BOOL bString; > > if ( !PyArg_ParseTuple( args, "O", &pObject ) ) return NULL; > > if ( ( pArray = ( PyArrayObject * )PyArray_ContiguousFromObject( > pObject, PyArray_OBJECT, 1, 1 ) ) == NULL ) return NULL; > > iCount = pArray->dimensions[0]; > iStride = pArray->strides[0]; > > bString = PyString_Check( ( PyObject * )( pArray->data ) ); > This is the problem.: pArray->data should be interpreted as (PyObject **) -- an array of PyObject *'s, and then de-referenced to get the PyObject * present at the first address So. this should work to check that the first entry in the array is a string: PyString_Check( *( ( PyObject ** )( pArray->data ) ) ); By the way, NumPy has support for true string (and unicode) arrays (as well as object arrays like this)... -Travis -- http://mail.python.org/mailman/listinfo/python-list