#pragma data_seg

#pragma data_seg  #pragma data_seg介绍 [1]
  用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:
  #pragma data_seg ("shareddata")
  HWND sharedwnd=NULL;//共享数据
  #pragma data_seg()
  -----------------------------------------------------------------
  1,#pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的有名字的数据段。最关键的是:这个数据段中的全局变量可以被多个进程共享,否则多个进程之间无法共享DLL中的全局变量。
  2,共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。例如,
  #pragma data_seg("MyData")
  int g_Value; // Note that the global is not initialized.
  #pragma data_seg()
  DLL提供两个接口函数:
  int GetValue()
  {
  return g_Value;
  }
  void SetValue(int n)
  {
  g_Value = n;
  }
  然后启动两个进程A和B,A和B都调用了这个DLL,假如A调用了SetValue(5); B接着调用int m = GetValue(); 那么m的值不一定是5,而是一个未定义的值。因为DLL中的全局数据对于每一个调用它的进程而言,是私有的,不能共享的。假如你对g_Value进行了初始化,那么g_Value就一定会被放进MyData段中。换句话说,如果A调用了SetValue(5); B接着调用int m = GetValue(); 那么m的值就一定是5,这就实现了跨进程之间的数据通信。

你可能感兴趣的:(dll,微软,编译器)