天马阁

 找回密码
 立即注册
                                        →→→→→→→→→→→→ 1点击查看所有VIP教程目录长列表(总教程数269个) 2办理VIP详情进入 ←←←←←←←←←←←←
1 x64CE与x64dbg入门基础教程 7课 已完结 2 x64汇编语言基础教程 16课 已完结 3 x64辅助入门基础教程 9课 已完结 4 C++x64内存辅助实战技术教程 149课 已完结
5 C++x64内存检测与过检测技术教程 10课 已完结 6 C+x64二叉树分析遍历与LUA自动登陆教程 19课已完结 7 C++BT功能原理与x64实战教程 29课 已完结 8 C+FPS框透视与自瞄x64实现原理及防护思路 30课完结
64驱?封? 9 64反驱? 10 64位V? 11 绝? 12 ???课?
13 64透 ? 14 64U ? 15 64Q ? 16 64功 ?
17 64U ? 18 64模 ? 19 64多 ? 20 64网 ?
21 64注 ? 22 64火 ? 23 64棋 ? 24 64自二链L?
25 64破 ? VIP会员办理QQ: 89986068   
【请先加好友,然后到好友列表双击联系客服办理,不然可能无法接受到信息。】
27 加入2000人交流群637034024 3 28 免责声明?
查看: 1080|回复: 0

VC++实现内存共享(两个EXE通过内存共享传递信息通信)

[复制链接]

14

主题

0

回帖

17

积分

编程入门

Rank: 1

天马币
28
发表于 2024-3-4 09:19:18 | 显示全部楼层 |阅读模式
共享内存通信演示
vc6.0 c++
演示步骤:
1. 启动smserver
2. <创建共享内存>
3. 启动smclient
4. 在smserver中,输入要写入的内容,然后点击“写入数据”
5. 在smclient可以看到smserver中写入的数据
smserver端可以反复写入数据,则在smclient端会可见随着改变
此演示非常简单,只是演示如何使用,没有考虑性能、方式等,如果需要拿到真正的代码中使用,则需要考虑其它额外的工作,比如方式、效率等

创建内存
  1. void CSmserverDlg::OnBtnopensm()
  2. {
  3. // TODO: Add your control notification handler code here
  4. if ( m_hShareMem == NULL )
  5. {
  6. SECURITY_ATTRIBUTES sa;
  7. memset( &sa, 0, sizeof(sa) );
  8. sa.nLength = sizeof(sa);
  9. m_hShareMem = CreateFileMapping( (HANDLE)0xFFFFFFFF, &sa, PAGE_READWRITE, 0, m_dwSMLen, TEXT("rm_test_share_memory_trans_20100601") );
  10. if ( m_hShareMem == NULL )
  11. {
  12. m_StStatus.SetWindowText( TEXT("创建共享内存失败!") );
  13. }
  14. else
  15. {
  16. m_lpVoidSM = MapViewOfFile( m_hShareMem, FILE_MAP_ALL_ACCESS, 0, 0, 0 );
  17. if ( m_lpVoidSM == NULL )
  18. {
  19. CString strErr;
  20. strErr.Format( TEXT("创建共享内存地址失败!error = %d"), GetLastError() );
  21. m_StStatus.SetWindowText( strErr );
  22. CloseHandle( m_hShareMem );
  23. m_hShareMem = NULL;
  24. }
  25. else
  26. {
  27. m_StStatus.SetWindowText( TEXT("创建共享内存成功---") );

  28. // 清空第一个字节
  29. memcpy( m_lpVoidSM, TEXT("\0"), 1 );
  30. }
  31. }
  32. }
  33. }



  34. 写入数据
  35. void CSmserverDlg::OnBtnwrite()
  36. {
  37. // TODO: Add your control notification handler code here
  38. if ( m_lpVoidSM == NULL )
  39. {
  40. AfxMessageBox( TEXT("先创建共享内存!"), MB_ICONSTOP );
  41. return;
  42. }

  43. CString strText;
  44. m_EdWrite.GetWindowText( strText );
  45. if ( strText.GetLength() == 0 )
  46. {
  47. AfxMessageBox( TEXT("必需输入要写入的内容!"), MB_ICONSTOP );
  48. return;
  49. }

  50. strcpy( (char*)m_lpVoidSM, strText.GetBuffer(0) );
  51. }



  52. 另一个EXE-读取数据。。。如下
  53. void CSmclientDlg::OnBtnopensm()
  54. {
  55. // TODO: Add your control notification handler code here
  56. if ( m_hShareMem == NULL )
  57. {
  58. SECURITY_ATTRIBUTES sa;
  59. memset( &sa, 0, sizeof(sa) );
  60. sa.nLength = sizeof(sa);
  61. m_hShareMem = CreateFileMapping( (HANDLE)0xFFFFFFFF, &sa, PAGE_READWRITE, 0, m_dwSMLen, TEXT("rm_test_share_memory_trans_20100601") );
  62. if ( m_hShareMem == NULL )
  63. {
  64. AfxMessageBox( TEXT("打开共享内存失败!"), MB_ICONSTOP );
  65. }
  66. else
  67. {
  68. m_lpVoidSM = MapViewOfFile( m_hShareMem, FILE_MAP_ALL_ACCESS, 0, 0, 0 );
  69. if ( m_lpVoidSM == NULL )
  70. {
  71. AfxMessageBox( TEXT("打开共享内存地址失败!"), MB_ICONSTOP );
  72. CloseHandle( m_hShareMem );
  73. m_hShareMem = NULL;
  74. }
  75. else
  76. {
  77. SetTimer( 1, 100, NULL );
  78. m_BtnOpenSM.SetWindowText( TEXT("正在监视...") );
  79. m_BtnOpenSM.EnableWindow( FALSE );
  80. }
  81. }
  82. }
  83. }

  84. void CSmclientDlg::OnTimer(UINT nIDEvent)
  85. {
  86. // TODO: Add your message handler code here and/or call default
  87. if ( strlen((char*)m_lpVoidSM) > 0 )
  88. {
  89. m_StRead.SetWindowText( (char*)m_lpVoidSM );
  90. memcpy( m_lpVoidSM, TEXT("\0"), 1 );
  91. }

  92. CDialog::OnTimer(nIDEvent);
  93. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

天马阁|C/C++辅助教程|安卓逆向安全| 论坛导航|免责申明|Archiver||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表天马阁立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2021 All Right Reserved.
快速回复 返回顶部 返回列表