"gianluca" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
On 30 Giu, 18:26, Jean-Paul Calderone <[EMAIL PROTECTED]> wrote:
On Mon, 30 Jun 2008 09:13:42 -0700 (PDT), gianluca <[EMAIL PROTECTED]> 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

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to