Subject: Re: exporting structs from DLL using mingw32/egcs 1.1 -- doesn't work
From: [email-masked] (Mumit Khan)

22 Oct 1998 14:12:47 -0700
Message-ID: <[email-masked]>
References: <001c01bdfcb0$303f7270$0600000a@mbe>
To: "Ron Aaron" <[email-masked]>
Cc: [email-masked], [email-masked]

"Ron Aaron" <[email-masked]> 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
"[email-masked]" with one line of text: "help".