[英]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.