[Python-Dev] Feature request: better support for "wrapper" objects

Thomas Heller thomas.heller@ion-tof.com
Wed, 9 Jan 2002 15:00:48 +0100


From: "Jack Jansen" <jack@oratrix.nl>
> And to give a complete example of how useful this would be consider the 
> following. I'll give a mac-centric example, because I don't know enough about 
> calldll on windows (and I don't think there's a unix version yet).
> 
> Assume you're using Python to extend Photoshop. Assume Photoshop has an API to 
> allow the plugin to get at the screen. Let's assume that there's a C call
> extern GrafPtr ps_GetDrawableSurface(void);
> to get at the datastructure you need to draw to.
> These GrafPtr's are (in Mac/Modules/qd/_Quickdraw.c) wrapped in 
> Carbon.Qd.GrafPortType objects in Python.
> 
> In the current situation, if you would want to wrap this ps_GetDrawableSurface 
> function you would need to write a C wrapper (which means you would need a C 
> compiler, etc etc) because you would need to convert the return value with 
> ("O&", GrafObj_new). If we had something like ("O@", typeobject) calldll could 
> be extended so you could do something like
> psapilib = calldll.getlibrary(....)
> ps_GetDrawableSurface = calldll.newcall(psapilib.ps_GetDrawableSurface,
> Carbon.Qd.GrafPortType)
> 
> (newcall() arguments are funcpointer, return value type, arg1 type, ...)
> 
> You cannot do this currently, because there is no way to get from the type 
> object (which is the only thing you have available in Python) to the functions 
> you need to pass to O&.

In Python 2.2, the type object can itself be an instance, and you could call
classmethods on it...
I'm doing something similar on windows.

Thomas