[PyKDE] exported symbols - all or none?

Phil Thompson phil at riverbankcomputing.co.uk
Wed Apr 27 22:30:35 BST 2005


On Wednesday 27 April 2005 7:40 pm, Anthony Heading wrote:
> On Wed, Apr 27, 2005 at 08:42:34AM +0100, Phil Thompson wrote:
> > And the bolted on code isn't called from Python?
>
> It's not wrapped via SIP.

But is it called from Python? If it is then why not use SIP to create a module 
with the required functionality?

SIP doesn't have to wrap a C++ library - you can use it to write standalone 
modules. All you need to do is to provide handwritten code for each function 
and method.

> > A function could be added to do what you want - but it would still
> > require that you imported the modules that defined the classes you were
> > interested in.
>
> I don't understand that.  The sip module could theoretically broker any
> information between modules, no?

Yes, so long as it knew about the modules, ie. that they had been imported.

> Even more simply, is it unreasonable 
> to want to call  sipGetAPI("qt")?   From that, I could chase all
> the function pointers I need.

The problem with that is that I would have to publish the data structure that 
represents the API. At the moment it is internal and I do change it between 
versions.

> > Python modules are not shared libraries that you should link against -
> > they are more like plugins. On most platforms libraries and plugins are
> > implemented identically. When I first designed SIP I didn't understand
> > the distinction and used the generated module as both a shared library
> > and a plugin - which meant that it didn't work on platforms that
> > implemented them differently. SIP 4 corrected this design error.
>
> Understand. But %Import'ing e.g. the qt module generates a lot of files,
> enough to extend the qt class hierararchy, and seems a lot of baggage just
> to get hold of some function pointers.

It generates a lot of files, but those don't generate any code. Those files 
define how a module accesses the API of those modules it %Imports.

> But if I understand now, there's an implicit rule that the only C++ code
> that can interact with a SIP module is in a derived module.   I'm not
> sure why that rule is imposed, because at a Python level any C++ code
> can call PyImport_ImportModule (just as sip_api_export_module is doing)
> to access a module without any requirement to inherit from it.  And
> that's a different constraint from the plugin/library linker distinction.

Yes - the constraint is a result of the module API not being published.

I'm quite happy to add stuff to the documented API (either at the C/C++ level 
or within the sip module) if it makes sense and is maintainable.

Can you give me a real-life example of what you are trying to do?

Phil




More information about the PyQt mailing list