c#和c++之间共享内存,读取的数据异常

llion.j 2019-11-27 04:34:27
c++代码:

for (UINT32 i = 0; i < mesh.polygons.size(); i++)
{
uDataTrans.udata = mesh.polygons[i].vertices[0];
for (UINT32 j = 0; j < 4; j++)
{
MeshData[pos + j] = uDataTrans.cdata[j];
}
pos += 4;
uDataTrans.udata = mesh.polygons[i].vertices[1];
for (UINT32 j = 0; j < 4; j++)
{
MeshData[pos + j] = uDataTrans.cdata[j];
}
pos += 4;
uDataTrans.udata = mesh.polygons[i].vertices[2];
for (UINT32 j = 0; j < 4; j++)
{
MeshData[pos + j] = uDataTrans.cdata[j];
}
pos += 4;
}
HANDLE handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4000000, "MeshMemory");
LPVOID addr = MapViewOfFile(handle, FILE_MAP_ALL_ACCESS, 0, 0, 4000000);
strcpy((char*)addr, MeshData);
UnmapViewOfFile(addr);
Sleep(100);

C#代码:

byte[] chartest = new byte[4000000];
handle = OpenFileMapping(0x02, 0, "MeshMemory");
addr = MapViewOfFile(handle, 0x02, 0, 0, 4000000);
Marshal.Copy(addr, chartest, 0, 4000000);
UnmapViewOfFile(addr);
CloseHandle(handle);

运行的结果为:只有chartest[0]有值,其它都为0,但是如果MeshData都赋值为一个固定的值,数据就是正常的,求大佬们解答!
...全文
277 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
llion.j 2019-11-28
  • 打赏
  • 举报
回复
是这样的,非常感谢!
github_36000833 2019-11-27
  • 打赏
  • 举报
回复
strcpy((char*)addr, MeshData); strcpy是用来拷贝字符串的(看到\0就会停止拷贝)。 是不是该用memcpy?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧