From: <dan...@ya...> - 2002-05-14 22:15:03
|
--- Oscar Fuentes <of...@wa...> wrote: > Dennis Jarosch <ya...@un...> writes: > > > Hi! > > > > I have a problem regarding mingw-dll's. I have created a dll with > > mingw on Win2k and a corresponding lib with Borland's implib tool. I > > am using the lib in a C++Builder project, which is a dll itself > > (actually it is a wrapper to the mingw-dll). > > > > Basically everything works fine, except that I have encountered a > > problem with a dynamically allocated struct-array. When iterating > > through the array (xxx[i].struct) in the Borland-compiled code the > > pointer to the struct is off by a few byte. It seems as if Borland > > assumes the structs are shorter than they are and so after every > > iteration the struct points to a few bytes of it's predecessor, making > > data access to any other struct than the first one impossible. > > So what 'sizeof' says about the size of the struct on either piece of > code? > > > I have started research on alignment and compiler flags and I can say > > that neither -fnative-struct nor -fpcc-struct-return worked. Playing > > with the C++Builder's alignment options didn't either! :-( > > > > Has anybody seen this before, or does anyone have any idea what else to > try? > > It is definitively possible to set the aligment inside the struct to > whatever you want with Borland. Take a look at #pragma pack. In your > case setting the alignment with a global option to match gcc is the > good way, IMO. > Oscar's advice on #pragma pack is the only way you can ensure consistent packing. This is a related question with relevance to how make mingw as comapatible as possible with "native" compilers. MSVC returns structs of up to 8 bytes via registers. (the ldiv_t struct returned by ldiv is classic example) Larger structs are returned in mem. Does Borland do same? Danny http://briefcase.yahoo.com.au - Yahoo! Briefcase - Save your important files online for easy access! |