ctype and functions that return a pointer to a structure

Lenard Lindstrom len-l at telus.net
Sun Jul 1 16:37:34 EDT 2007


hg wrote:
> Hi,
> 
> I have the following code:
> ******************************************
> from ctypes import * 
> g_lib = cdll.LoadLibrary("libc.so.6")
> class Struct_Password(Structure): 
>     """ 
>      
>     """ 
>     _fields_ = [ ('name', c_char_p), 
>                 ('code', c_char_p), 
>                 ('date', c_long), 
>                 ('min',  c_long), 
>                 ('max',  c_long), 
>                 ('warn', c_long), 
>                 ('inact', c_long), 
>                 ('expire', c_long), 
>                 ('flag', c_ulong) 
>             ]
> l_res =  g_lib.getspnam('john') 
> l_struct = cast(l_res, POINTER( Struct_Password() ) ) 

l_struct = cast(l_res, POINTER( Struct_Password ) )

POINTER wants a ctypes type as an argument. Struct_Password() is a 
Structure instance.

A better way to do it is define the return type for getspnam:

g_lib.getspnam.restype = POINTER( Struct_Password )

Now the function returns a structure pointer so the cast is unnecessary.

---
Lenard Lindstrom
<len-l at telus.net>



More information about the Python-list mailing list