From: khan AT xraylith DOT wisc DOT edu (Mumit Khan) Subject: Re: exporting structs from DLL using mingw32/egcs 1.1 -- doesn't work 22 Oct 1998 14:12:47 -0700 Message-ID: <9810220110.AA19722.cygnus.gnu-win32@modi.xraylith.wisc.edu> References: <001c01bdfcb0$303f7270$0600000a AT mbe> To: "Ron Aaron" Cc: egcs AT cygnus DOT com, gnu-win32 AT cygnus DOT com "Ron Aaron" writes: > I am trying to export data from a DLL, where the variable in question is a > struct. > > So I have in my DLL: > __declspec(dllexport) struct joebob myvar; > > and in the file which uses is: > __declspec(dllimport) struct joebob myvar; > > But the mingw32/egcs 1.1 compiler complains that there is a declaration > conflict between the two. > > Now, if I change this to 'struct joebob * myvar' in both places, it works > just fine. > > My problem is that this is someone else's code, and it compiles and runs > fine with the Borland C compiler, and changing the dozen or so instances of > this sort of thing would involve a *lot* of #ifdef's in the code, which I > studiously wish to avoid. > > Is this an issue which will be repaired? That is, will I be able to export > data larger than int's at some point (or how can I do it now)? The code is not correct. MSVC issues a warning instead of an error: test.c(6) : warning C4273: 'myvar' : inconsistent dll linkage. dllexport assumed. which IMO is simply dangerous. Much better to flag it as an error instead. I might go with MSVC behaviour of issuing a warning, and error when -pedantic, for next release however. Win32 DLLs are grotesque to use, and even more grotesque to implement correctly; all the special redefinition rules don't help matters mcuh. It's better to just code correctly. See my dllhelpers package on how to do this portably that works with all the win32 compilers. http://www.xraylith.wisc.edu/~khan/software/gnu-win32/ Regards, Mumit - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".