是这样的我最近在研究易语言和c++的opencv检测通讯 用的是内存映射 写入内存的路径文本例如模型文件和图片文件 写入进去后c++这边正确读取到没其他毛病,但是我写入字节集图片 在c++那边读取总是读取不对不知道为什么
易语言写入代码:
变量名 | 类 型 | 静态 | 数组 | 备 注 | hwnd | 整数型 | | | LPSTR | 整数型 | | | len | 整数型 | | | lenx | 整数型 | | | Datas | 字节集 | | |
len = 取字节集长度 (Data )lenx = len + 4 Datas = 到字节集 (len ) + Data hwnd = OpenFileMappingA (2, 1, Name )LPSTR = MapViewOfFile (hwnd, 2, 0, 0, 0 ) 写到内存 (Datas, LPSTR, lenx )UnmapViewOfFile (LPSTR )
C++读取代码:
[C++] 纯文本查看 复制代码 unsigned char* ReadData_E_char(LPCSTR name)
{
HANDLE handle = OpenFileMappingA(FILE_MAP_READ, FALSE, name);
if (handle == NULL) {
return NULL;
}
LPVOID m_LPSTR = MapViewOfFile(handle, FILE_MAP_READ, 0, 0, 0);
if (m_LPSTR == NULL) {
CloseHandle(handle);
return NULL;
}
// 获取主数据长度
DWORD dataSize = *(DWORD*)m_LPSTR;//487438
// 获取数据指针
LPVOID data = (LPVOID)((DWORD_PTR)m_LPSTR + sizeof(DWORD));
// 获取数据内容
unsigned char m_data = (unsigned char)data;
UnmapViewOfFile(m_LPSTR);
CloseHandle(handle);
return (unsigned char*)m_data;
}
然后我c++中使用
unsigned char* imgeData = ReadData_E_char("OpenCV_TensorRT_imgData");// 图片数据
// 创建一个Mat对象,使用图像数据初始化
cv::Mat img = cv::Mat(dstw, dsth, CV_8UC3, imgeData);
这样不是报错就是读出来是错误的乱码
ReadData_E_char这个方法读取到的数据应该是正确的 因为我遍历了一下数据 正常有内容 而且我读取到的数据长度dataSize 也是正确的
但还是会出错 求大佬们教教是哪里出错了
|