ctypes - swig - pointer

Mark Tolonen M8R-yfto6h at mailinator.com
Mon Jun 30 23:25:46 EDT 2008


"gianluca" <geonomica at gmail.com> wrote in message 
news:58461c91-ed11-4153-8d74-429353e4fdd1 at z72g2000hsb.googlegroups.com...
> On 30 Giu, 18:26, Jean-Paul Calderone <exar... at divmod.com> wrote:
>> On Mon, 30 Jun 2008 09:13:42 -0700 (PDT), gianluca <geonom... at gmail.com> 
>> wrote:
>> >I've a problem with dll function colled with python/ctypes. My
>> >functions (C) requred a typedef int  "value_type" in tree different
>> >way:
>> >same as value_type; - mydll.foo1(value_type)
>> >same as *value_type; - mydll.foo2(*value_type)
>> >same as **value_type; - mydll.foo3(**value_type)
>>
>> >How can pass it in python. If i do that:
>> >rules=POINTER(value_type)
>> >opr=rsl.StrengthOfRules(rules,10)
>> >R=POINTER(rules)
>>
>> POINTER takes a class and returns a new class which represents a pointer
>> to input class.
>>
>> pointer takes an instance and returns a new object which represents a
>> pointer to that instance.
>>
>> Jean-Paul
>
> so,
> if I write this:
> p=pointer(value_type)
> mydll.foo1(p)
> could be correct but python say me:
> TypeError: _type_ must have storage info
> what does mean?
>
> thank you
>
> gima

It means you cannot create a pointer to a type, you need to provide an 
instance of a type:

>>> from ctypes import *
>>> px=pointer(c_int)
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\dev\python\lib\ctypes\__init__.py", line 282, in pointer
    return POINTER(type(inst))(inst)
  File "C:\dev\python\lib\ctypes\__init__.py", line 226, in POINTER
    {'_type_': cls})
TypeError: _type_ must have storage info
>>> x=c_int(5)            # make an instance (C equiv. is "int x=5;")
>>> px=pointer(x)       # int* px = &x;
>>> ppx=pointer(px)  # int** ppx = &px;
>>> x
c_long(5)
>>> px
<ctypes.LP_c_long object at 0x00E87350>
>>> ppx
<ctypes.LP_LP_c_long object at 0x00E873A0>

--Mark




More information about the Python-list mailing list