[Python.NET] Experimental C Extensions from IronPython with Python.NET - code and article

Sanghyeon Seo sanxiyn at gmail.com
Wed Oct 24 04:54:39 CEST 2007

2007/10/24, Michael Foord <fuzzyman at voidspace.org.uk>:
> I've just posted the experimental code for accessing CPython extensions
> from IronPython.
> Article: http://www.voidspace.org.uk/ironpython/cpython_extensions.shtml
> Comments, bugfixes and improvements welcomed!

* Strings from .NET come in as unicode on the CPython type

An evil workaround is to define PyStringConvert as:
def PyStringConvert(obj):
    # evil
    return PyString(obj).GetAttr('encode').Invoke()

This could be improved on Python.NET side. Any idea?

* Can't yet pass in keyword args to function calls.

This is related to the previous item, because:
>>> def f(a): pass
>>> f(**{u'a': 1})
TypeError: f() keywords must be strings

With the previous workaround in place, replace PythonObject.__call__ with:
def __call__(self, *args, **kw):
    args = ConvertToPy(args)
    kw = ConvertToPy(kw)
    return ConvertToIpy(self.real.Invoke(args, kw))

This is more straightforward than creating PyObject[].

Seo Sanghyeon

More information about the PythonDotNet mailing list