[Python-Dev] Re: [Python-checkins] CVS: python/dist/src/Modules xxsubtype.c,2.9,2.10

Guido van Rossum guido@python.org
Mon, 17 Dec 2001 09:08:31 -0500

> > Log Message:
> > David Abrahams tried to compile this as a separate DLL under MSVC, and
> > got a barrage of compile errors that didn't make sense to the C++ brain:
> > MSVC does not allow C (but does allow C++) initializers to contain
> > data addresses supplied by other DLLs.  So changed the initializers here
> > to use dummy nulls, and changed module init to plug in the foreign
> > addresses at runtime (manually simulating what C++ does by magic).  Tested
> > on Windows, and Guido tested on Linux (thanks!).  BTW, the *point* is that
> > people are going to use this module as a template for writing their own
> > subtypes, and it's unusual for extension authors to build their extensions
> > into Python directly (separate DLLs are the norm on Windows); so it's
> > better if we give them a template that works <wink>.

> This is a common problem when compiling Windows extensions. Perhaps
> we should provide some more generic way to help the extension
> writers here ?! FWIW, I'm using this macro for doing the deferred
> type init:
> #define PyType_Init(x)                                          \
> {                                                               \
>     x.ob_type = &PyType_Type;                                   \
> }

Hm, alternatively, we could put a statement in PyType_Ready() that
initializes ob_type if it's NULL -- then we'd encourage people to call
PyType_Ready(), which is a good idea anyway.

--Guido van Rossum (home page: http://www.python.org/~guido/)