From: Earnie B. <ear...@ya...> - 2001-11-15 13:30:35
|
I'm looking at someone elses port work and find that in some conditions it's possible to end up with something like __declspec(dllexport) extern char * foo; in the code. Isn't this wrong? Is is possible to export an external variable? -- Earnie. _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com |
From: Roger W. <ROG...@sa...> - 2001-11-15 14:33:17
|
I think that's ok. After all every header with #ifdef __cplusplus extern "C" { #endif . . . effectively does the same thing Roger Wells, P.E. SAIC 221 Third St Newport, RI 02840 401-847-4210 (voice) 401-849-1585 (fax) ro...@mt... ----- Original Message ----- From: "Earnie Boyd" <ear...@ya...> To: "MU List" <Min...@so...> Sent: Thursday, November 15, 2001 8:29 AM Subject: [Mingw-users] Puzzled. > I'm looking at someone elses port work and find that in some conditions > it's possible to end up with something like > __declspec(dllexport) extern char * foo; > in the code. Isn't this wrong? Is is possible to export an external > variable? > > -- > Earnie. > > > > _________________________________________________________ > Do You Yahoo!? > Get your free @yahoo.com address at http://mail.yahoo.com > > > _______________________________________________ > MinGW-users mailing list > Min...@li... > > You may change your MinGW Account Options at: > https://lists.sourceforge.net/lists/listinfo/mingw-users > |
From: Mark J. <mar...@ie...> - 2001-11-15 18:20:30
|
Hi, If you must have globals, make sure you control access to them via functions. But yes, you'll need to export them if they are to reside in a DLL. Best Regards, Mark Jordan. ----- Original Message ----- From: "Earnie Boyd" <ear...@ya...> To: "MU List" <Min...@so...> Sent: Thursday, November 15, 2001 5:29 AM Subject: [Mingw-users] Puzzled. > I'm looking at someone elses port work and find that in some conditions > it's possible to end up with something like > __declspec(dllexport) extern char * foo; > in the code. Isn't this wrong? Is is possible to export an external > variable? > > -- > Earnie. > > > > _________________________________________________________ > Do You Yahoo!? > Get your free @yahoo.com address at http://mail.yahoo.com > > > _______________________________________________ > MinGW-users mailing list > Min...@li... > > You may change your MinGW Account Options at: > https://lists.sourceforge.net/lists/listinfo/mingw-users |
From: Earnie B. <ear...@ya...> - 2001-11-15 18:44:12
|
Yes, but would you export the variable at creation. Why would you export an externally declared variable? It seems right to __declspec(dllexport) char * foo; and to later in some other file to __declspec(dllimport) extern char * foo; but it seems wrong to __declspec(dllexport) extern char * foo; . It's probably semantics but I'm puzzled. Earnie. Mark Jordan wrote: > Hi, > If you must have globals, make sure you control access > to them via functions. But yes, you'll need to export > them if they are to reside in a DLL. > > Best Regards, > Mark Jordan. > > ----- Original Message ----- > From: "Earnie Boyd" <ear...@ya...> > To: "MU List" <Min...@so...> > Sent: Thursday, November 15, 2001 5:29 AM > Subject: [Mingw-users] Puzzled. > > > I'm looking at someone elses port work and find that in some conditions > > it's possible to end up with something like > > __declspec(dllexport) extern char * foo; > > in the code. Isn't this wrong? Is is possible to export an external > > variable? > > > > -- > > Earnie. > > > > > > > > _________________________________________________________ > > Do You Yahoo!? > > Get your free @yahoo.com address at http://mail.yahoo.com > > > > > > _______________________________________________ > > MinGW-users mailing list > > Min...@li... > > > > You may change your MinGW Account Options at: > > https://lists.sourceforge.net/lists/listinfo/mingw-users > > _______________________________________________ > MinGW-users mailing list > Min...@li... > > You may change your MinGW Account Options at: > https://lists.sourceforge.net/lists/listinfo/mingw-users -- Earnie. _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com |
From: Mark J. <mar...@ie...> - 2001-11-15 19:14:26
|
Hi Earnie, I agree with you, but I don't think it matters. "extern" is saying that the variable definition is located in another module, the declspec stuff is just adding the additional information that the other module is a DLL. Cheers, Mark. ----- Original Message ----- From: "Earnie Boyd" <ear...@ya...> To: "Mark Jordan" <mar...@ie...> Cc: "MU List" <Min...@so...> Sent: Thursday, November 15, 2001 10:43 AM Subject: Re: [Mingw-users] Puzzled. > Yes, but would you export the variable at creation. Why would you export an > externally declared variable? > > It seems right to > __declspec(dllexport) char * foo; > and to later in some other file to > __declspec(dllimport) extern char * foo; > but it seems wrong to > __declspec(dllexport) extern char * foo; > . It's probably semantics but I'm puzzled. > > Earnie. > > Mark Jordan wrote: > > > Hi, > > If you must have globals, make sure you control access > > to them via functions. But yes, you'll need to export > > them if they are to reside in a DLL. > > > > Best Regards, > > Mark Jordan. > > > > ----- Original Message ----- > > From: "Earnie Boyd" <ear...@ya...> > > To: "MU List" <Min...@so...> > > Sent: Thursday, November 15, 2001 5:29 AM > > Subject: [Mingw-users] Puzzled. > > > > > I'm looking at someone elses port work and find that in some conditions > > > it's possible to end up with something like > > > __declspec(dllexport) extern char * foo; > > > in the code. Isn't this wrong? Is is possible to export an external > > > variable? > > > > > > -- > > > Earnie. > > > > > > > > > > > > _________________________________________________________ > > > Do You Yahoo!? > > > Get your free @yahoo.com address at http://mail.yahoo.com > > > > > > > > > _______________________________________________ > > > MinGW-users mailing list > > > Min...@li... > > > > > > You may change your MinGW Account Options at: > > > https://lists.sourceforge.net/lists/listinfo/mingw-users > > > > _______________________________________________ > > MinGW-users mailing list > > Min...@li... > > > > You may change your MinGW Account Options at: > > https://lists.sourceforge.net/lists/listinfo/mingw-users > > -- > Earnie. > > > > _________________________________________________________ > Do You Yahoo!? > Get your free @yahoo.com address at http://mail.yahoo.com > |
From: stefan <st...@lk...> - 2001-11-15 22:58:29
|
On Thu, 15 Nov 2001, Earnie Boyd wrote: > Yes, but would you export the variable at creation. Why would you export an > externally declared variable? > > It seems right to > __declspec(dllexport) char * foo; This defines foo. > and to later in some other file to > __declspec(dllimport) extern char * foo; This declares foo. > but it seems wrong to > __declspec(dllexport) extern char * foo; > . It's probably semantics but I'm puzzled. If you #include the definition (not the declaration) twice (in different .c files) you'll have two foo variables. Cheers, st...@lk... |
From: <dan...@ya...> - 2001-11-15 23:51:06
|
--- Earnie Boyd <ear...@ya...> wrote: > Yes, but would you export the variable at creation. Why would you export > an > externally declared variable? > > It seems right to > __declspec(dllexport) char * foo; > and to later in some other file to > __declspec(dllimport) extern char * foo; > but it seems wrong to > __declspec(dllexport) extern char * foo; > . It's probably semantics but I'm puzzled. > > Earnie. > extern int i; /* Declaration without definition */ just says that the variable is defined later (in same translation unit or a different one). It just introduces the name so it can be used. This is legal: __declspec(dllexport) extern char * foo; __declspec(dllexport) extern char * foo; __declspec(dllexport) extern char * foo; OTOH: __declspec(dllexport) int k; /* Decalaration and definition */ says make (allocate storage for) the variable now. This, of course, is *not* legal: __declspec(dllexport) char * foo; __declspec(dllexport) char * foo; because of the one definition-rule. The dllexport attribute has nothing to do with it. http://shopping.yahoo.com.au - Yahoo! Shopping - Get organised for Christmas early this year! |
From: Franco B. <fra...@we...> - 2001-11-16 05:14:25
|
Am Donnerstag, 15. November 2001 19:43 schrieb Earnie Boyd: > Yes, but would you export the variable at creation. Why would you expo= rt > an externally declared variable? > > It seems right to > __declspec(dllexport) char * foo; > and to later in some other file to > __declspec(dllimport) extern char * foo; > but it seems wrong to > __declspec(dllexport) extern char * foo; > . It's probably semantics but I'm puzzled. > > Earnie. As long as one uses <C> or <extern "C"> for the symbols, it doesn't matte= r=20 weather you use __declspec(dllexport) or __declspec(dllimport) with C++ classes this is different: in the header : #ifdef __IN_DLL_ITSELF #define MYDLLEXP __declspec(dllexport) #else=20 #define MYDLLEXP __declspec(dllimport) #endif class MYDLLEXP foo{ public: =09foo(); }; when bulding the DLL __IN_DLL_ITSELF has to be defined, so when=20 including the header the class is known to be exported form the DLL. when using the DLL __IN_DLL_ITSELF must not be defined, so it's clear th= at=20 the class is imported from a DLL. Ciao, Franco |
From: <dan...@ya...> - 2001-11-16 08:48:21
|
--- Earnie Boyd <ear...@ya...> wrote: > Yes, but would you export the variable at creation. Why would you export > an > externally declared variable? > > It seems right to > __declspec(dllexport) char * foo; > and to later in some other file to > __declspec(dllimport) extern char * foo; > but it seems wrong to > __declspec(dllexport) extern char * foo; > . It's probably semantics but I'm puzzled. > > Earnie. Look at he assembler output for this: /* extern.c */ __declspec(dllexport) extern char * foo; __declspec(dllexport) extern char * bar; char *bar; static char* foofun(void){ return foo; }; gcc -S extern.c outputs: .file "extern.c" .text .align 2 .def _foofun; .scl 3; .type 32; .endef _foofun: pushl %ebp movl %esp, %ebp movl _foo, %eax popl %ebp ret .comm _bar, 16 # 4 .section .drectve .ascii " -export:bar,data" The dllexport attribute marks the symbol bar so that it is put in .drectve section. This lets the linker know to put it in export table in dll. That's all. It only does it for symbols that are defined. So foo, which is defined in another module isn't exported here. The dllexport attribute on foo doesn't do anything (except tell the human reader that the intent is to export foo from the dll after defining in another module). But foo can be used since it is declared. Danny http://shopping.yahoo.com.au - Yahoo! Shopping - Get organised for Christmas early this year! |
From: Mikael A. <mik...@ma...> - 2001-11-15 23:02:09
|
Hi ! It's pretty useless at the declaration, the docs say nothing about it (except for a small not that you should have a declspec OR an extern/static keyword if I interpreter it correct), so I guess it's wrong even though the compiler might swallow and ignore it. Mikael ----- Original Message ----- From: "Earnie Boyd" <ear...@ya...> To: "MU List" <Min...@so...> Sent: Thursday, November 15, 2001 2:29 PM Subject: [Mingw-users] Puzzled. > I'm looking at someone elses port work and find that in some conditions > it's possible to end up with something like > __declspec(dllexport) extern char * foo; > in the code. Isn't this wrong? Is is possible to export an external > variable? > > -- > Earnie. > > > > _________________________________________________________ > Do You Yahoo!? > Get your free @yahoo.com address at http://mail.yahoo.com > > > _______________________________________________ > MinGW-users mailing list > Min...@li... > > You may change your MinGW Account Options at: > https://lists.sourceforge.net/lists/listinfo/mingw-users > |