共享内存结构体数据(结构体不能使用指针)

xiaoxiao2021-02-27  148

struct MyStruct { int a; int b; TCHAR name[20]; }; void CNewSoulDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 MyStruct Test; Test.a = 1; Test.b = 2; _tcscpy(Test.name, "三哥说:我不是猪"); HANDLE m_hMapObject = CreateFileMapping( (HANDLE)0xffffffff, //因为不是读写文件,所以不需要文件句柄 nullptr, //默认安全属性 PAGE_READWRITE, //可读写 0, //高32位不用 0x1000, //用低32位,大小为4k TEXT("ShareData") //共享数据的名字 ); if (!m_hMapObject) { AfxMessageBox(TEXT("创建映射对象失败")); } //获取一块内存空间以便写入数据 MyStruct *m_pszMapView = (MyStruct*)MapViewOfFile(m_hMapObject, FILE_SHARE_WRITE, 0, 0, 0); if (!m_pszMapView) { AfxMessageBox(TEXT("映射数据失败")); } //lstrcpy(m_pszMapView, Test); memcpy(m_pszMapView,&Test, sizeof(Test)); } void CNewSoulDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 MyStruct *str; HANDLE m_hMapObject;//映射对象句柄 //打开映射对象 m_hMapObject = OpenFileMapping( FILE_MAP_READ, //可读映射 FALSE, //不被继承 TEXT("ShareData")//共享数据的名称 ); if (!m_hMapObject) { AfxMessageBox(TEXT("打开映射失败")); } //读取共享数据,只要得到这块共享内存的地址,只要里面的数据发生改变,m_pszMapView也会跟着改变 MyStruct *m_pszMapView = (MyStruct*)MapViewOfFile(m_hMapObject, FILE_SHARE_READ, 0, 0, 0); str = m_pszMapView; if (!m_pszMapView) { AfxMessageBox(TEXT("读取映射数据失败")); } CString sor; sor.Format("%d %d %s", str->a, str->b,str->name); AfxMessageBox(sor); UnmapViewOfFile(m_pszMapView); CloseHandle(m_hMapObject); }
转载请注明原文地址: https://www.6miu.com/read-12645.html

最新回复(0)