python - 将C++中的数据映射到内存并以Python读取数据

标签 python c++ memory

我在C++中将整数映射到内存(进程1),并尝试在Python中读取它们(进程2)..

当前结果:

1)在C++中映射整数3 ==> Python(b'\ x03 \ x00 \ x00 \ x00')

2)在C++ ==> Python(b'\ x04 \ x00 \ x00 \ x00')中映射整数4,依此类推..

码:

处理1

#include <windows.h> 
#include <iostream>

using  namespace std;

void main()
{
    auto name = "new";
    auto size = 4;

    HANDLE hSharedMemory = CreateFileMapping(NULL, NULL, PAGE_READWRITE, NULL, size, name);
    auto pMemory = (int*)MapViewOfFile(hSharedMemory, FILE_MAP_ALL_ACCESS, NULL, NULL, size);

    for (int i = 0; i < 10; i++)
    {
        * pMemory = i;
        cout << i << endl;
        Sleep(1000);
    }

    UnmapViewOfFile(pMemory);
    CloseHandle(hSharedMemory);
}

处理2
import time
import mmap
bufSize = 4
FILENAME = 'new'

for i in range(10):
    data = mmap.mmap(0, bufSize, tagname=FILENAME, access=mmap.ACCESS_READ)
    dataRead = data.read(bufSize)
    print(dataRead)
    time.sleep(1)


但是,我的目标是映射一个尺寸为320 * 240的数组,但是当我尝试如下所示的简单数组时
int arr[4] = {1,2,3,4};并尝试通过* pMemory = arr;映射到内存

我收到错误“无法将int *类型的值分配给int类型的实体”和错误代码“0x80070002” ..
关于如何解决这个问题的任何想法?

P.S由于某种原因在python中将整数9映射为b'\ t \ x00 \ x00 \ x00'==>我缺少什么?

最佳答案

使用 memcpy 将阵列复制到共享内存。

#include <cstring>
#include <windows.h>

int main() {
  int array[320*240];
  const int size = sizeof(array);
  const char *name = "new";

  HANDLE hSharedMemory = CreateFileMapping(NULL, NULL, PAGE_READWRITE, NULL, size, name);
  void *pMemory = MapViewOfFile(hSharedMemory, FILE_MAP_ALL_ACCESS, NULL, NULL, size);

  std::memcpy(pMemory, array, size);

  UnmapViewOfFile(pMemory);
  CloseHandle(hSharedMemory);
}

关于python - 将C++中的数据映射到内存并以Python读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59002831/

相关文章:

python - Flask:强制下载pdf文件在浏览器中打开

python - 安全 Python 登录

java - “在子类实例化期间,父类(super class)的私有(private)字段是否也在堆内存中占有一席之地?

memory - 如何识别 "Space is low"原因

PHP 对象创建和内存使用

python - 使用 python/sympy 求解 RC 电路

python - 使用正则表达式从文本文件的每一行中删除子字符串

c++ - 检查枚举有效性

c++ - libspatialindex 是否需要重新序列化以进行简单更新?

C++ 程序不会在 Xcode 中打印到 cout