有一个IO.LIB静态库中有属于类的static变量,DLL A和B各自链接了IO.LIB。在EXE A中启动线程调用了DLL A,DLL A中又调用了DLL B(非线程调用),DLL B中对static变量初始化,在DLL B返回之后,DLL A的static变量没有变化。请问这个static变量的归属是怎样的?

解决方案 »

  1.   

    dll B是对DLL B中的静态变量初始化,它不对DLLA中的静态变量初始化,LIB是静态库,两个DLL中都有它的代码,两个DLL是独立的,如果是IO.DLL那么DLLA和DLLB就共用IO代码.
      

  2.   

    DLL中的静态变量只在DLL中有效。貌似是vc6的bug
      

  3.   

    to wwwllg:进程是一个进程,但是结果却不像你所说的那样,DLL A对static变量的初始化对DLL B没有任何影响,DLL B的static变量还是初始值。
      

  4.   

    我以前做过一次测试,但时间太久远,5,6年了,我这次又得新做了一个例子。
    我做了这样的一个工程。
    a,b,c三个dll
    c中有一个static变量d = 24;a,b都加载c.b中f()把d设置成100.a中f()把d设置成101.在a中export接口,getd();
    我在测试程序test.exe中,加载f。并调用f(),然后getd();返回 值为100.
      

  5.   

    我在测试程序test.exe中,加载a。并调用f(),然后getd(); 返回 值为100.
      

  6.   

    用extern int dllGlobalVar声明所导入的并不是DLL中全局变量本身,而是其地址,应用程序必须通过强制指针转换来使用DLL中的全局变量extern int _declspec(dllimport) dllGlobalVar; //用_declspec(dllimport)导入
    通过_declspec(dllimport)方式导入的就是DLL中全局变量本身而不再是其地址了,笔者建议在一切可能的情况下都使用这种方式。
      

  7.   

    翻阅了一些资料,static数据不是跨链接单元的,只在自己的单元内可见。所以static的数据各是各的。