繁体   English   中英

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

[英]Map data in C++ to memory and read data in Python

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

当前结果:

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

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

代码:

过程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;映射到内存* pMemory = arr;

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

PS出于某种原因整数9在python中映射为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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM