Eric Frederich, 05.01.2011 17:27:
I have read through all the documentation here:
http://docs.python.org/extending/newtypes.html
I have not seen any documentation anywhere else explaining how to
create custom defined objects from C.
At this point, it is best to take a look at Cython *before* continuing your
struggle to solve problems that you wouldn't even have become aware of if
you had used it right away.
I have this need to create custom objects from C and pass them as
arguments to a function call.
Question 1: how am I to create those objects from C code?
In Cython:
obj = SomeType()
or (in some truly performance critical cases):
obj = SomeType.__new__(SomeType)
The other thing I would like to know is how I can create helper
functions in my extension so they can be created and manipulated
easily.
Either functions or static methods would work here. It's up to you to make
a suitable design choice.
I am thinking along the lines of the built-in helper functions
PyList_New and PyList_Append.
Once I have an answer to question 1, the problem won't be creating the
helper functions, but making them available from something built with
distutils.
To use the builtin python functions from C I need to link against
python27.lib but when I create my own package using distutils it
creates dll or pyd files.
Cython has an embedding mode ("--embed" option) that generates a suitable
main() function to embed the Python interpreter in your module. That might
work for you as is, or it will at least show you the required C code that
you can adapt as you see fit.
Question 2: How do I make C helper functions that are part of my
extension available to other C projects in the same way that PyList_*,
PyString_*, PyInt_* functions are available?
Cython allows you to mark C functions and Python extension types with the
"api" keyword and generates suitable header files and import/export code
for them that you can use both from C and from other Cython generated
modules. It automatically uses PyCObject in older Python versions and
PyCapsule in Py2.7 and Py3.1+.
Stefan
--
http://mail.python.org/mailman/listinfo/python-list