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);
}
共享内存结构体数据(结构体不能使用指针)
最新推荐文章于 2024-08-18 17:19:12 发布