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