117.info
人生若只如初见

c++ windows下创建共享内存

在Windows下,可以使用CreateFileMapping函数来创建共享内存。

以下是一个示例代码:

#include 
#include 
int main()
{
// 创建共享内存
HANDLE hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE,   // 使用无效的文件句柄
NULL,                   // 默认安全属性
PAGE_READWRITE,         // 可读写权限
0,                      // 共享内存大小(0表示文件大小)
4096,                   // 共享内存名称
TEXT("MySharedMemory")
);
if (hMapFile == NULL)
{
std::cout << "无法创建共享内存,错误代码:" << GetLastError() << std::endl;
return 1;
}
// 将共享内存映射到进程的地址空间
LPVOID pBuf = MapViewOfFile(
hMapFile,       // 共享内存句柄
FILE_MAP_ALL_ACCESS,    // 可读写权限
0,
0,
);
if (pBuf == NULL)
{
std::cout << "无法映射共享内存,错误代码:" << GetLastError() << std::endl;
CloseHandle(hMapFile);
return 1;
}
// 写入数据到共享内存
strcpy_s((char*)pBuf, 4096, "Hello, shared memory!");
// 等待用户输入
std::cin.get();
// 解除内存映射
UnmapViewOfFile(pBuf);
// 关闭共享内存句柄
CloseHandle(hMapFile);
return 0;
}

这段代码创建了一个大小为4096字节的共享内存,并将字符串"Hello, shared memory!"写入其中。你可以在其他进程中使用OpenFileMapping函数来打开并读取共享内存中的数据。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fef8dAzsLBgNeAFw.html

推荐文章

  • windows硬盘序列号如何查看

    要查看Windows操作系统中的硬盘序列号,可以按照以下步骤进行操作: 打开“命令提示符”或“PowerShell”窗口。可以通过在Windows搜索栏中输入“cmd”或“PowerS...

  • Windows任务管理器无法打开怎么解决

    如果Windows任务管理器无法打开,可以尝试以下解决方法: 使用快捷键打开任务管理器:按下Ctrl + Shift + Esc组合键,看是否能够打开任务管理器。 使用Windows系...

  • Windows临时文件怎么删除

    要删除Windows临时文件,可以按照以下步骤操作: 打开文件资源管理器,可以通过快捷键Win + E打开。 在地址栏中输入%temp%并按回车键,这将打开Windows临时文件夹...

  • windows注册表的功能是什么

    Windows注册表是Windows操作系统中的一个重要组成部分,它用于存储和管理系统和应用程序的配置信息。注册表是一个层次结构的数据库,包含了各种设置、选项和配置...

  • linux在本用户有写的权限的文件夹内无法删除文件夹内文件

    如果在Linux中您有写权限的文件夹中无法删除文件夹内的文件,可能是由于以下几个原因: 文件或文件夹的权限设置不正确:请确保您对要删除的文件或文件夹具有适当...

  • Excel写入数据报错“运行时错误3004”

    运行时错误3004通常是由于访问被保护的单元格或工作表而导致的。下面是一些解决办法: 检查要写入数据的单元格或工作表是否被保护。如果是,您需要解除保护才能进...

  • 想要用C++实现matlab中griddata的二维插值功能

    要在C++中实现Matlab中griddata的二维插值功能,可以使用第三方库,如OpenCV或Eigen。
    下面是使用OpenCV库实现二维插值的示例代码:
    #include #includ...

  • readprocessmemory直接读取内存和使用api

    readprocessmemory是一个Windows API函数,用于从另一个进程的内存中读取数据。这个函数可以通过进程的句柄和内存地址来读取指定位置的数据。
    使用readproc...