By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,676 Members | 2,236 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,676 IT Pros & Developers. It's quick & easy.

Pointers and ctypes

P: n/a
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.

Thanks a lot

Carlo and Pierre

Aug 29 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Le 29 Aug 2005 06:19:17 -0700, ru**********@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

Aug 29 '05 #2

P: n/a
thanks a bunch, i just got the answer myself. next time i think about
it a little longer.
thanks again
carlo

Aug 29 '05 #3

P: n/a
F. Petitjean wrote:
Le 29 Aug 2005 06:19:17 -0700, ru**********@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

Aug 29 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.