[C++-sig] problems with lvalue_from_pytype

David Abrahams dave at boost-consulting.com
Sat Nov 23 02:55:13 CET 2002


Mark Russell <mrussell8081 at pacbell.net> writes:

> David,
>
> From your last reply:
> snip...
>
> One way is just to find out what the real type of the pointee is on your
> own, by
> examining the header file.
>
> An HWND is a pointer to an HWND__ struct defined as follows:
>
> struct HWND__ { int unused; };
> typedef struct HWND__* HWND
>
> I have attached three files noddy.cpp cn.cpp, and cnl.cpp-- cnl
> contains my conversion for noddy objects just using longs cn does
> the same thing using HWND.  The following python session shows how
> it works for longs:
>
> C:\developer\com-hacking\boost hacking\convert noddy long>python
> Python 2.2.2 (#37, Oct 14 2002, 17:02:34) [MSC 32 bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import noddy,cnl
>>>> n=noddy.noddy()
>>>> m=cnl.magic()
>>>> m.magicnum
> 1957
>>>> m.magicnum=n
>>>> m.magicnum
> 453311
>>>>
>
> cnl (convert noddy long) contains a struct called magic with a single data
> member--magicnum.  The struct initializes magicnum to 1957.  Noddy's all
> have an int value attribute 453311.  I assign a noddy to m.magicnum
> (setattr) and my converter correctly retrieves values and assigns it to the
> magicnum data member.  The problem is indeed occurring when I try to do the
> same thing using pointers (my attempt is in cn.cpp).  I just want to pass an
> int from python to my converter--have the converter cast the int to an HWND
> (pointer).  How does knowing the real type help me in this situation?


As I wrote several messages ago:

> So if you want to convert to HWND, your converter's execute function
> must return a reference to the type that HWND points to
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- 
                       David Abrahams
   dave at boost-consulting.com * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution





More information about the Cplusplus-sig mailing list