[IronPython] Announcement: Project to get some CPython C extensions running under IronPython

Curt Hagenlocher curt at hagenlocher.org
Wed Oct 17 18:45:50 CEST 2007


On 10/17/07, Paolo Molaro <lupus at ximian.com> wrote:
>
>
> The python API requires a couple dozen structure definitions plus a few
> dozen dllimport declarations. This can be about 200 lines of trivial
> to write declarative stuff.


I'm having trouble understanding what you mean by this.  Let's say I've got
an extension method that looks like this:

PyObject * ModifyColumns(PyObject * self, PyObject * args)
{
    PyObject * columns;
    if (!PyArg_ParseTuple(args, "O", &columns))
    {
        return NULL;
    }

    if (!PySequence_Check(columns))
    {
        PyErr_SetString(PyExc_ValueError, "parameter must be a sequence");
        return NULL;
    }

    PyObject * result = PyTuple_New(PySequence_Length(columns));
    for (int i = 0; i < PySequence_Length(columns); i++)
    {
        PyObject * value = PySequence_GetItem(sequence, i);
        // Do something to value
        // And make sure you don't screw up the reference count
        PySequence_SetItem(result, i, value);
    }

    return result;
}

In order to use this extension from IronPython, I need C implementations of
each of those API functions.  The PySequence_ methods should to be able to
understand CLR arrays or any other IEnumerable-like object.  I'm not sure
what PyTuple_New should return, but whatever it is will need to have
PyObject*-like semantics.

How does DllImport fit into this picture?  How can I avoid implementing all
these functions in C or C++?

--
Curt Hagenlocher
curt at hagenlocher.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20071017/3b7ad5be/attachment.html>


More information about the Ironpython-users mailing list