Board index » cppbuilder » TransferBuffer issue with ComboBox hint
golfman
![]() CBuilder Developer |
TransferBuffer issue with ComboBox hint2006-10-18 10:36:56 AM cppbuilder101 I have always had a problem with transfer buffers and OWLNext under MSVC. I always had to put ComboBoxData structures before all others until.... I found the cause of my woes. Hopefully this might help others. It's a structure packing/alignment problem. The VC compiler by default aligns things on 8 byte boundaries. If some TEdit text data falls first in the TransferBuffer structure then it will be aligned by the compiler then if some ComboBoxData falls later it will not align properly when the transfer method accesses it because it performs pointer arithmetic based on the sizes returned from each control - ignoring structure member alignment (sometimes called padding). To make sure your Transfer Buffer struct's work enclose them in #pragma's that turn of padding (ie., alignment = 1 byte). // Turn off struct padding #pragma pack(1) // define structure struct TB { WORD SDKVersion10; WORD SDKVersion11; WORD SDKVersion12; WORD SDKVersion13; WORD optimize; WORD executeInParentDirectory; WORD promptBeforeClosingRun; WORD redirectOutputAndDisplayCompile; char compileCommand[OCOLEN+1]; char runCommand[RUNCOMMANDLEN+1]; } *tranBuf; // Switch back to default padding #pragma pack() |