On 26/05/2006 4:43 AM, [EMAIL PROTECTED] wrote: > Dear All, > > I am new to python win32, and i cannot figure out how to format the data > string for deviceiocontrol code with win32file. > > I have the following c struct in my driver file: > typedef struct _WRITE_DEVICE_DATA_INPARAMS > { > UCHAR ucMemorySpace; // 0: I/O Space, 1: Mem Space. > ULONG ulPhysicalAddress; // Dword-aligned offset to write to. > ULONG ulItemSize; // 1: Byte, 2: Word, 4: Dword. > ULONG ulItemCount; // Number of bytes, words or > dwords. > > union{ > UCHAR vucDataBuf[1]; > USHORT vusDataBuf[1]; > ULONG vulDataBuf[1]; > }data; > > }WRITE_DEVICE_DATA_INPARAMS, *PWRITE_DEVICE_DATA_INPARAMS; > > I tried to format my data string like this: > data=struct.pack('BLLLH',2,1020,2,1,0) > > but got the following error: > OverflowError: long int too large to convert to int
It would help if you showed the code that you actually executed and the traceback. There is no problem with the above pack call: Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import struct >>> data=struct.pack('BLLLH',2,1020,2,1,0) >>> data '\x02\x00\x00\x00\xfc\x03\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00' >>> hex(1020) '0x3fc' Perhaps you meant that the error is coming from deviceiocontrol. You will notice that the first item is padded out with 3 bytes of \x00 so that the 2nd item is aligned on a 32-bit boundary. This may be the cause of your problem. The error that you got is consistent with something trying to convert (positive) 0xFC000000L to a *signed* 32-bit integer. Why signed, I don't know. What does &(mystruct.ulPhysicalAddress) - &(mystruct.ucMemorySpace) [warning: my C is a little rusty!] give you in C (using the compiler used for the driver)? If the answer is 1, you need to lose the padding; read the fine print at the end of the struct.pack manual section. Note that the default alignment used is according to the C compiler used to compile Python (Microsoft), which may differ from the alignment used by the compiler used for the driver (gcc?). If the answer is 4, then the problem is not with your usage of struct.pack. > > Apparentely the error is coming from 1020. However it is define as ulong > for both case the c struct and the python struct.pack. > HTH, John _______________________________________________ Python-win32 mailing list Python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32