在DLL中如何共享数据?
我想让DLL中的变量被所有的线程共享,怎么定义这个变量?

解决方案 »

  1.   

    如果希望被所有调用该DLL的进程所共享,可以:#pragma data_seg(".SDATA")//定义全局数据#pragma data_seg()
      

  2.   

    To : masterdog(掌门狗) 我试过了不行,以下是按你的提示做的,我用的是Win2K。
    为什么?请指教。#pragma data_seg(".SDATA")
    int iShareData = 0;
    #pragma data_seg()
      

  3.   

    不好意思,如果你用的是VC的话,还需要在Project/Setting/Link的Project Options:中加上选项:-SECTION:.SDATA,RWS
      

  4.   

    这样也可以:
    1.在源文件中定义:
    #pragma data_seg(".sdata")
    //你的全局变量
    #pragma data_seg()
    这样编译器将为你生成一个.sdata的段,这个段在调用此DLL的各进程间是共享的。但前提是这些全局变量必须在定义时被初始化,否则编译器将把它放入.bss段中,此段存储所有未被初始化的全局变量。
    2.在.DEF文件中,声明.sdata段为共享段:
    SECTIONS
      .sdata READ WRITE SHARED
      

  5.   

    没有用的,共享内存段只在W9X下有效,NT/2000/XP已经不支持共享内存段了。
      

  6.   

    用MapFile做进程间的数据共享啊!
      

  7.   

    To masterdog(掌门狗) 
    行了,谢谢。
    20分送上
      

  8.   

    To BCB_FANS:
    你错了,MSDN/Knowledge Base/Q125677中明确指出,这种方法适用于所有Win32平台:Win95/98/NT4/2000