[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: OT dll-hell where to find help
 
- From: "Wesley Smith" <wesley.hoke@...>
 
- Date: Mon, 21 Apr 2008 01:36:19 -0700
 
On Mon, Apr 21, 2008 at 1:25 AM, Ben Harper <rogojin@gmail.com> wrote:
> There is nothing particularly strange about it. Static class data is
>  just like static C data. It lives within a compilation unit, which is
>  basically a single .CPP file. If you use the correct
>  __declspec(dllexport) / __declspec(dllimport) declaration on your
>  class, then you shouldn't have a problem. Perhaps your static data
>  needs to be initialized? Does your static data have a non-trivial
>  constructor? If so, then you must realize that these constructors are
>  run by the DLL loader, which is built into your DLL by the linker. You
>  must take care not to use such objects until after the DLL loader has
>  finished running.
Thanks for the response.  This was exactly my understanding, but
somehow this is not what I'm experiencing.  For example, to even back
away from C++ into C I have this code:
#ifdef __cplusplus
extern "C" {
#endif
extern __declspec(dllexport) int t1;
extern __declspec(dllexport) int *t2;
#ifdef __cplusplus
}
#endif
Then in the .cpp file I have
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) int t1 = 6969;
__declspec(dllexport) int *t2 = 0;
#ifdef __cplusplus
}
#endif
When I look at these vars in the debugger, I get absolute garbage and
when I try to write to them, I get crashes from access violations.
This is with VS2008 and my project set to a dll build.  I don't think
there's anything particularly wrong with my code.  <sigh>
wes