Visual c++ 如何在windows中使用共享内存

Visual c++ 如何在windows中使用共享内存,visual-c++,Visual C++,考虑一下,我有两个Windows独立GUI应用程序。每当我在第一个GUI中按下命令按钮时,其他GUI应捕获按钮的状态,并应在其中的文本框中显示ON或OFF。如何使用共享内存来实现这一点 PS:我正在使用VC++2008。看看: 在过程1中: CreateFileMapping():如果共享内存块不存在,它将使用上一个参数中提供的名称创建共享内存块,如果成功,它将返回一个句柄(您可以称之为指针) MapViewOfFile():它在进程地址空间中映射(包括)这个共享块,并返回一个句柄(你也可以说是

考虑一下,我有两个Windows独立GUI应用程序。每当我在第一个GUI中按下命令按钮时,其他GUI应捕获按钮的状态,并应在其中的文本框中显示ON或OFF。如何使用共享内存来实现这一点

PS:我正在使用VC++2008。

看看:

在过程1中:

CreateFileMapping()
:如果共享内存块不存在,它将使用上一个参数中提供的名称创建共享内存块,如果成功,它将返回一个句柄(您可以称之为指针)

MapViewOfFile()
:它在进程地址空间中映射(包括)这个共享块,并返回一个句柄(你也可以说是指针)

使用MapViewOfFile()返回的指针,只有您才能访问该共享块

在过程2中:

OpenFileMapping()
:如果CreateFileMapping()成功创建了共享内存块,则可以使用相同的名称(用于创建共享内存块的名称)

UnmapViewOfFile()
:它将取消映射(您可以从该进程地址空间中删除共享内存块)。使用完共享内存(即访问、修改等)后,调用此函数

Closehandle()
:最后要从进程中分离共享内存块,请使用参数调用此函数,由OpenFileMapping()或CreateFileMapping()返回句柄。

查看:

在过程1中:

CreateFileMapping()
:如果共享内存块不存在,它将使用上一个参数中提供的名称创建共享内存块,如果成功,它将返回一个句柄(您可以称之为指针)

MapViewOfFile()
:它在进程地址空间中映射(包括)这个共享块,并返回一个句柄(你也可以说是指针)

使用MapViewOfFile()返回的指针,只有您才能访问该共享块

在过程2中:

OpenFileMapping()
:如果CreateFileMapping()成功创建了共享内存块,则可以使用相同的名称(用于创建共享内存块的名称)

UnmapViewOfFile()
:它将取消映射(您可以从该进程地址空间中删除共享内存块)。使用完共享内存(即访问、修改等)后,调用此函数


Closehandle()
:最后,要从进程中分离共享内存块,请使用参数调用此函数,由OpenFileMapping()或CreateFileMapping()返回句柄。

查看此函数就像询问“如何使用电锯修剪草坪?”使用适当的工具来完成作业。查看此函数就像询问“我如何用电锯修剪草坪?”使用适当的工具完成工作。我使用您提供的链接成功地完成了。谢谢。我对此有一个疑问。我们如何确定BUF_大小的值?(#定义BUF_大小256,您提供的链接中给出了256。)我认为#define BUF_SIZE 256只是一个例子,您也可以使用MAX_PATH(在WinApi32中定义)此外,我始终需要以管理员身份运行exe。如何使普通用户可以使用该exe?如果您正在运行Vista:除非调用CreateFileMapping的应用程序在用户帐户控制规则下以管理权限(而不是默认权限)运行,否则此操作在Microsoft Vista上不起作用。您将获得拒绝访问的权限(错误5)取而代之的是。让我们看看我用你提供的链接成功地做到了。谢谢。我对此有一个疑问。我们如何确定BUF_大小的值?(#定义BUF_大小256,在你提供的链接中给出了256。)我认为#定义BUF_大小256只是一个例子,你也可以使用MAX_路径(在WinApi32中定义)此外,我始终需要以管理员身份运行exe。如何使普通用户可以使用该exe?如果您正在运行Vista:除非调用CreateFileMapping的应用程序在用户帐户控制规则下以管理权限(而不是默认权限)运行,否则此操作在Microsoft Vista上不起作用。您将获得拒绝访问的权限(错误5)相反,让我们