首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 進程間通訊 (IPC) 十一大技術全景解析:從剪貼板到 COM/DCOM

     編輯:VC 教學

進程隔離與通訊必要性

Win32 進程擁有獨立虛擬位址空間 (4GB),核心物件管理進程屬性,使用者模式記憶體互不相干。為跨越此隔離,Windows 提供多種 IPC 機制,依資料量、同步需求、跨網絡能力、程式複雜度選型。

十一種 IPC 技術詳細比較

#技術核心機制適用場景優點缺點/注意
1剪貼板全域共享記憶體 + 視窗訊息通知少量文字/圖片跨應用複製貼上極簡單、CWnd 封裝完善不適合高頻/大資料、易衝突
2視窗訊息 / WM_COPYDATASendMessage 跨進程傳遞結構指標簡單資料傳遞、UI 互動觸發無需額外物件、同步阻塞模式接收端需有視窗、資料量受限 (LPARAM)
3共享記憶體 (File Mapping)CreateFileMapping + MapViewOfFile高效能、大資料量、多進程隨機存取速度最快、無資料複製開銷需自行同步 Mutex/Event、記憶體佈局需協定
4動態資料交換 (DDE)全域原子表 + 視窗訊息廣播Win16 遺留、Office 早期整合標準化協議Win32 已淘汰、效能差、除錯難
5管道核心緩衝區 + ReadFile/WriteFile父子進程、本機服務通訊API 熟悉、支援重疊 I/O匿名管道單向/本機;命名管道雙向/跨網路但格式固定
6郵件槽廣播式資料報,CreateMailslot單向廣播、尋找服務、日誌收集無連線、跨網路廣播不可靠、資料量小 (426 bytes)、Win9x 僅支援客戶端
7Windows SocketTCP/UDP 標準網路 API跨機器、跨平台、客戶端/伺服器通用標準、可擴充性最強程式複雜、需處理封包/連線管理
8Internet 通訊 (WinInet/WinHTTP)HTTP/FTP/Gopher 高層協議下載更新、呼叫 Web API支援 Proxy/SSL/快取非即時雙向通訊
9RPC (遠程過程呼叫)IDL 定義介面、MIDL 編譯 Stub企業級分散式系統、跨語言強型別、位置透明學習曲線陡、與 Unix RPC 不相容
10序列/並行埠CreateFile("COM1") + DCB 設定嵌入式裝置、儀器控制、舊系統整合硬體直連、無網路依賴速度慢、程式繁瑣、現代較少用
11COM / DCOMProxy/Stub 封送、介面導向元件重用、跨進程/跨機器物件模型二進制相容、版本管理、安全性整合僅能透過介面函式傳資料、部署複雜

共享記憶體實作關鍵步驟 (技術 #3 深入)

  1. 建立/開啟映射:
    Server:CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, NAME)
    Client:OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, NAME)
    判斷 GetLastError() == ERROR_ALREADY_EXISTS 決定誰初始化資料。
  2. 映射視圖:LPVOID pView = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  3. 同步:必須建立 CreateMutex(NULL, FALSE, MUTEX_NAME),讀寫前 WaitForSingleObject,完 ReleaseMutex。
  4. 清理:UnmapViewOfFile(pView); CloseHandle(hMap); CloseHandle(hMutex);

選型建議

  • 同機、高效能、大資料 → 共享記憶體 + Mutex。
  • 同機、簡單指令/通知 → 命名管道或 WM_COPYDATA。
  • 跨網路、標準協議 → Socket / HTTP / gRPC (現代替代 RPC)。
  • 元件化、物件導向 → COM (本機) / DCOM / COM+ (企業級)。
  • 避坑指南:DDE 已棄用;剪貼板不可作同步機制;匿名管道僅限親緣進程;郵件槽不可靠。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved