Pointers and ctypes

F. Petitjean littlejohn.75 at news.free.fr
Mon Aug 29 10:05:57 EDT 2005


Le 29 Aug 2005 06:19:17 -0700, rubbishemail at web.de a écrit :
> Hello,
> i've got a problem with pointers in the following function which i want
> to use:
>
> I16 __stdcall DO_ReadPort (U16 CardNumber, U16 Port, U32 *Value)
>
> The function is supposed to read out the status of a digital port of
> analog digital interface card.
> I got this function from Dask.h which came with the card. The relevant
> lines concerning this function are the following:
>
> typedef short           I16;
> typedef unsigned short  U16;
> typedef unsigned long   U32;
>
> I16 __stdcall DO_ReadPort (U16 CardNumber, U16 Port, U32 *Value)
>
> I tried to implement this function into python:
> # I16 __stdcall DO_ReadPort (U16 CardNumber, U16 Port, U32 *Value);
>     ReadOPort = dask.DO_ReadPort
>     ReadOPort.argtypes = [c_ushort, c_ushort, c_ulong]
>     ReadOPort.restype = c_short
>
> I can't handle the pointer "Value" which should be an unsigned long
> pointer. I'd be very happy, if u could give me a hint how to implement
> this pointer into python.

You can use the ctypes.byref() function (as it is in an argulent list):

  ReadOPort.argtypes = (c_ushort, c_ushort, ctypes.POINTER(c_ulong) )
  ReadOPort.restype = c_short
  status = c_ulong()  #  status value to be read
  number = c_ushort(1)   # CardNumber = 1
  port = c_ushort(11)
  rc = ReadOPort(number,  port, ctypes.byref(status))
  print rc, ststus
>
> Thanks a lot
>
> Carlo and Pierre
>



More information about the Python-list mailing list