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

Reply via email to