进程间通信的几种方法

    技术2022-05-11  73

    1.管道

    2.Socket

    3.SendMessage()处理WM_COPYDATA消息

    4.PostMessage()

    5.内存映射文件 

     分别建立名为WriteMap和ReadMap两个对话框工程.加入按钮事件:    1)      在WriteMap中加入ID=IDC_WriteMap的按钮以及响应事件OnWriteMap().    2)      在ReadMap中加入ID=IDC_ReadMap的按钮以及响应事件OnReadMap().    3)      下面的操作对两个工程都是一样的:      a.在dlg.h  中加入struct SHARE_DATA {  int time;  char  str[10];};      b.在dlg.cpp中加入                      #define ShareMemory sizeof(SHARE_DATA)                      #define MAP_FILE_NAME "Shared_Memory_Example"     4)      添加相应的事件函数:      a.WriteMap:      void CWriteMapDlg::OnWriteMap()       {         HANDLE   hFileMap;               hFileMap = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0, ShareMemory,MAP_FILE_NAME );            if ( hFileMap == NULL )                  return;            LPVOID   lpMap;         lpMap = MapViewOfFile( hFileMap,FILE_MAP_ALL_ACCESS,0, 0,ShareMemory );         if ( lpMap == NULL )          {                 CloseHandle( hFileMap );                    return;            }            memset( lpMap, 0, ShareMemory );            SHARE_DATA * pData = (SHARE_DATA*)lpMap;            pData->time=1;         lstrcpy( LPTSTR(pData->str), "Map Suc!!!" );      }      b.ReadMap:      void CReadMapDlg::OnReadMap()       {         HANDLE   hFileMap;               hFileMap = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0, ShareMemory,MAP_FILE_NAME );            if ( hFileMap == NULL || GetLastError()!=ERROR_ALREADY_EXISTS )               return;            LPVOID   lpMap;            lpMap = MapViewOfFile( hFileMap,FILE_MAP_ALL_ACCESS,0, 0,ShareMemory );            if ( lpMap == NULL )          {                       CloseHandle( hFileMap );                    return;            }         SHARE_DATA * pData = (SHARE_DATA*)lpMap;            CString   strMap;            strMap.Format( "be Written times:= %ld, be Shared block's string = %s", pData->time, pData->str );            MessageBox( LPCTSTR(strMap) );            VERIFY( UnmapViewOfFile( (LPCVOID)lpMap ) );            CloseHandle( hFileMap );      }

    6 通过dll的全局数据共享变量

    7 通过硬盘上的文件进行通信


    最新回复(0)