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.
Thanks a lot
Carlo and Pierre
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
>Le 29 Aug 2005 06:19:17 -0700, rubbis...@web.de a écrit :
>
>
...
>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
>
>
Just as an FYI, Thomas has recently added code which does the byref
automatically. The version of ctypes in CVS HEAD will allow you to pass
in a c_ulong where the argtype is ctypes.POINTER(c_ulong).
Have fun,
Mike
--
________________________________________________
Mike C. Fletcher
Designer, VR Plumber, Coder
http://www.vrplumber.com
http://blog.vrplumber.com