代码之家  ›  专栏  ›  技术社区  ›  Johan Bresler

如何将信息写入Windows“全局(内存中)变量”,而不是使用Windows API由各种应用程序共享?

  •  2
  • Johan Bresler  · 技术社区  · 17 年前

    也许这是无法做到的,但请帮助或建议如何在不向磁盘写入内容的情况下实现这一点。

    2 回复  |  直到 16 年前
        1
  •  5
  •   Greg Hewgill    17 年前

    您可能要做的是创建一个内存映射文件。您可以创建一个内存映射文件,该文件在磁盘上没有任何备份存储,而是由系统页面文件备份。请查看以下文档: CreateFileMapping INVALID_HANDLE_VALUE .

    您可以为这样的文件映射指定一个唯一的系统范围名称,然后其他应用程序可以使用 OpenFileMapping 并提供相同的名称。

    一旦你有了这样一块共享内存,你就可以把任何你喜欢的信息放进去。请注意,由于内存是跨进程共享的,因此您不希望将任何指针存储到内存块中(这就排除了存储内存之类的操作) std::string 那里)。

        2
  •  3
  •   atzz    17 年前

    CreateFileMapping INVALID_HANDLE_VALUE 作为第一个参数,因为您不需要实际的文件),并将共享数据放入映射中。您还需要一个命名互斥体来同步对此数据的访问。

    懒惰的方法是使用 #pragma data_seg (对于MSVC;其他编译器也有类似的工具)将数据放在共享部分。请注意,MSVC要求显式初始化数据;否则,它将转到常规数据部分,甚至不会发出警告。

    第二种方法的缺点是这里不应用安全性,因此任何用户(甚至跨会话)都可以访问共享部分。另一个问题是,只有相同可执行文件(或DLL)的实例才会共享该节;i、 例如,如果您复制一个.exe并从两个不同的位置运行它,数据将不会共享。

    推荐文章