[PyKDE] Function pointer problem
Phil Thompson
phil at riverbankcomputing.co.uk
Sat Sep 9 14:56:45 BST 2006
On Saturday 09 September 2006 12:44 am, David Boddie wrote:
> On Friday 08 September 2006 05:07:49 +0100 (BST), jim j wrote:
> > I have a problem while compiling the following code.
> > the code is given below:
> >
> > %Module pyMyTimer
> >
> > typedef void (*TIMERFP)(long);
> >
> > struct _time
> > {
> > %TypeHeaderCode
> > #include <mytimer.h>
> > %End
> >
> > long expiryTime;
> > TIMERFP pRoutine;
> > long param;
> > };
> >
> > %ModuleHeaderCode
> > #include<cTimer.h>
> > %End
> >
> > int myTimerStart(_time* , long , TIMERFP , long );
> > long myTimerStop(_time* );
> >
> > I'm geting the following error ,
> > sip: _time::pRoutine has an unsupported type.
> >
> > please ,help me to solve the problem... how will i deleare the Function
> > pointer in a sip file? and howl will i use that as parameter in a
> > function?
>
> I thought this would be fairly easy, but I think you will have to try the
> approach described in this message:
>
> http://mats.gmd.de/pipermail/pykde/2003-May/005309.html
>
> To summarise: you probably need to write a wrapper for Python callback
> objects and create a C/C++ callback function that you register with the
> myTimerStart() function. This C/C++ callback function is used as a proxy
> for Python callbacks. I think you might need to write some %MethodCode
> for the myTimerStart() function as well.
That's the correct way of doing it and should work in this case so long as the
C++ callback can use it's argument to correctly identify the correct Python
callable to call. There isn't enough information in the above to say whether
or not this is the case.
> Alternatively, you might be able to just define TIMERFP as a mapped type,
> using something like this:
>
> typedef void (*TIMERFP)(long);
> %MappedType TIMERFP
> {
> %TypeHeaderCode
> #include <mytimer.h>
> %End
>
> %ConvertFromTypeCode
>
> // Code to convert a C++ function pointer to a Python callable.
> // Perhaps this would be used by a C++ proxy function to find a
> // suitable Python callable to return.
>
> %End
>
> %ConvertToTypeCode
>
> // Code to convert a Python callable into a suitable C++ function
> // pointer. Perhaps the pointer to an existing C++ proxy function
> // could be returned.
>
> %End
> };
>
> All of the above is speculative. I haven't tried to do this with SIP, and I
> couldn't find any existing examples except some on the web with really old
> SIP syntax. I hope it helps you get started, anyway.
This won't help because it wouldn't be possible to implement
the %ConvertFromTypeCode without additional information.
Phil
More information about the PyQt
mailing list