If you find out where in the struct the alignment differs then
you could make a packed record, and then inserting padding
bytes manually until it fits.

Like this:

[pascal]sTransferRegion = packed record
heartbeat: cuint32;
touchX, touchY: cint16;
touchXpx, touchYpx: cint16;
touchZ1, touchZ2: cint16;
tdiode1, tdiode2: cuint16;
pad1,pad2 : byte; //padding
buttons: cuint16;
pad3,pad4 : byte; //padding
...etc
[/pascal]

Also my first guess would be that the c/pascal alignment could
differ at the last 8-bit fields: mailRead, mailBusy: cuint8;