dynamic classes and duck typing

bearophile bearophileHUGS at lycos.com
Tue Dec 1 15:50:49 PST 2009


Walter Bright:

> Ok, does this work:
> 
>      p = libc.malloc(100);
>      *p = 3;
> 
> ? Or this:
> 
>      struct S { int a; char b; };
>      S s;
>      libc.fillInS(&s);

The purpose of ctypes is to interface Python with C libs, it's a quite well designed piece of software engineering. This is how you can do what you ask for:

from ctypes import POINTER, Structure, cdll, c_int, c_char

libc = cdll.msvcrt # on Windows
# libc = CDLL("libc.so.6") # on linux
malloc = libc.malloc

malloc.restype = POINTER(c_int)
p = malloc(100)
p[0] = 3

#-----------------

class S(Structure):
    _fields_ = [("a", c_int), ("b", c_char)]

s = S()
# AttributeError: function 'fillInS' not found
libc.fillInS(byref(s))

Bye,
bearophile



More information about the Digitalmars-d mailing list