Matt <[EMAIL PROTECTED]> wrote: > Okay so well, I have quite a problem right now with a file stream. What > I am doing is to use the Cannon SDK dlls to get control over my old > Cannon A60 Camera for some surveillance useage. > > By using ctypes it all worked well until now. I am able to load the > dlls, use a lot of functions, am able to connect to the camera, read out > some params, send commands etc... but now I am stuck with reading the > picture data. > > In C the code looks as follows (found in an supplemental *.h SDK file: [snip] > So, since I'm no C-Professional, I can only guess what that code does. > With some previous commands I tell the camera to make a picture. This > picture is then automatically moved to the PCs RAM and with the function > above (CDGetReleasedData) I should be able to access this stream. Now I > havn't accessed any stream with ctypes yet so I have only a rough idea > how it could work. > > The following are the relevant parts of my code that don't work: > > > # Definitions: > > class cdReleaseImageInfo(Structure): > _fields_ = [("SequenceID", c_uint), > ("DataType", c_uint), > ("Format", c_ubyte), > ("DataSize", c_uint), > ("Filename", c_char * 2)] > > > class cdStream(Structure): > _fields_ = [("contextH", c_uint), > ("open", c_uint), > ("close", c_uint), > ("read", c_uint), > ("write", c_uint), > ("seek", c_uint), > ("tell", c_uint)]
These c_uints would be better as c_void_p at minimum Howerver I suspect you are going to have to implement these callback functions - read this section of the manual http://docs.python.org/lib/ctypes-callback-functions.html I suspect it will call back your functions for the given functionality, eg "open", "close" etc... > class memunion(Union): > _fields_ = [("lpszFileName", c_char), This should be c_char_p I suspect... > ("pStream", cdStream)] and this should be POINTER(cdStream) > class cdStgMedium(Structure): > _fields_ = [("Type", c_uint), > ("u", memunion)] > > > > > # command: > > datainfo = cdReleaseImageInfo() > data = cdStgMedium() > errorcode = cdsdk.CDGetReleasedData(devicehandle, byref(cbfunct), > c_uint(1), c_uint(1), byref(datainfo), byref(data)) > > The function "cdsdk.CDGetReleasedData" itself gets executed correctly, > but returns an "Invalid Parameter" errorcode. there's also no useful > data whereas datainfo gets written correctly. I know that my cdStream > can't work, facing the C-code, but what'd be the right cdStream class? > What can I do? Any ideas? I've noted some obvious problems above. To get this to work will require some C knowledge. If they supply some example C code I'd work through that translating it line by line to python+ctypes. -- Nick Craig-Wood <[EMAIL PROTECTED]> -- http://www.craig-wood.com/nick -- http://mail.python.org/mailman/listinfo/python-list