Okay, thanks a lot for your reply Nick, I think you pushed me back on the right way.

Now I started with trying to implement the callback functions and am stuck at the following point:

I define my classes/structures/unions:

------------------------------CODE-----------------------------------------

class cdStream(Structure):
    _fields_ = [("contextH", c_uint),
                     ("open", c_void_p),
                     ("close", c_void_p),
                     ("read", c_void_p),
                     ("write", c_void_p),
                     ("seek", c_void_p),
                     ("tell", c_void_p)]

class memunion(Union):
    _fields_ = [("lpszFileName", c_char_p),
                     ("pStream", cdStream)]


class cdStgMedium(Structure):
    _fields_ = [("Type", c_uint),
                     ("u", memunion)]

------------------------------\CODE----------------------------------------

then i define my functions (right now I do just nothing) and at the same time I define the datatypes like they're listed in my C sample program:


------------------------------CODE-----------------------------------------

def pystreamopen (contextH, mode, pErr):
    pass

cstreamopen = CFUNCTYPE(c_uint, c_ushort, c_uint)

def pystreamclose (contextH, pErr):
    pass

cstreamclose = CFUNCTYPE(c_uint, c_uint)

def pystreamread (contextH, pBuf, pBufsize, pErr):
    pass

cstreamread = CFUNCTYPE(c_uint, c_void_p, c_uint, c_uint)

def pystreamtell (contextH, pErr):
    pass

cstreamtell = CFUNCTYPE(c_uint, c_uint)

def pystreamwrite (contextH, origin, offset, pErr):
    print "writing..."
    pass

cstreamwrite = CFUNCTYPE(c_uint, c_void_p, c_uint, c_uint)

------------------------------\CODE----------------------------------------

and now the problem starts: i want the pointers in the cdStream Structure point at my functions and tried to do it the following way:


------------------------------CODE-----------------------------------------

data = cdStgMedium()
data.type = 0
data.u.pStream.contextH = c_uint(3) #must be some kind of identifier.
data.u.pStream.open = cstreamopen(pystreamopen)
data.u.pStream.close = cstreamclose(pystreamclose)
data.u.pStream.write = cstreamwrite(pystreamwrite)
data.u.pStream.tell = cstreamtell(pystreamtell)
data.u.pStream.read = cstreamread(pystreamread)

------------------------------\CODE----------------------------------------

unfortunately that doesn't work because Python returns a TypeError: incompatible types, CFunctionType instance instead of c_void_p instance

Any ideas/help (please)?

Best regards,
Matt


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to