zoukankan      html  css  js  c++  java
  • data_seg

    1#pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的,有名字的数据段。最关键的是:这个数据段中的全局变量可以被多个进程共享。否则多个进程之间无法共享DLL中的全局变量。

    2共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。

    3,你所谓的结果正确是一种错觉。如果你在一个DLL中这么写:

    #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;
    }

    然后启动两个进程ABAB都调用了这个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!这就实现了跨进程之间的数据通信!

  • 相关阅读:
    C#将List<T>转化为DataTable
    SqlServer常用内置函数
    C#索引器
    验证Textbox的字符长度
    WM消息对应的Message消息中的Lparam和WParam
    对窗体操作的WM消息
    DllImport使用
    C#获取当前路径的七种方法
    注册ActiveX控件
    [转]VS2010中水晶报表安装应用及实例
  • 原文地址:https://www.cnblogs.com/wwb0111/p/3098972.html
Copyright © 2011-2022 走看看