我在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/