Embedding Python in C

mistabean at gmail.com mistabean at gmail.com
Mon Jun 4 16:58:38 CEST 2007


Hello,

first of all, I am a programming newbie, especially in python...

Onwards to the problem, I have been having difficulty embedding a
python module into my C/C++ program. (just a test program before
moving on into the real thing). I have been making test runs using the
codes from http://docs.python.org/ext/pure-embedding.html as a basic,
but modifiying it now as a function inside my C/C++ code.

Problem started when I started passing an array as an argument. The
module also need an array as an argument, but somehow I can't make
them to go pass the "input-error checking" of the module.

The code for argument building and calling are as follows:

void CallSnake(char ModName[], char FuncName[], double result[])
{
  ...
  /*Some operations to import modname, and preping FuncName, all is
ok*/
  ...
  /*Processing the result array and calling the function, problem
time*/
        pArgs = PyTuple_New(MAX_ELEMENT);
        pArg = PyList_New(1);
        for (i = 0; i < MAX_ELEMENT; ++i)
        {
             pValue = Py_BuildValue("d", result[i]);
             PyTuple_SetItem(pArgs, i, pValue);

             if (!(*pArgs).ob_refcnt)
             {
                    Py_DECREF(pArgs);
                    Py_DECREF(pModule);
                    fprintf(stderr, "Cannot convert argument\n");
                    return;
             }
         }

         PyList_SetItem(pArg, 0, pArgs);
         pValue = PyObject_CallFunctionObjArgs(pFunc,pArg,NULL);
   /*Some more checking and DECREFing occurs here*/
 }

Error I have been getting is:

Traceback
       if x.ndim != 1; /*x is the input array, checking if it's a 1D*/
AttributeError: 'list' object has no attribute 'ndim'

I have been trying many call variations, but alas, I think the problem
lies in the list building process. I have no problems calling a non-
arrayed (albeit,still single) argument.

Thanks in advance...




More information about the Python-list mailing list