goetzie wrote:
Quote:
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...
Quote:
>
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