Win32 進程擁有獨立虛擬位址空間 (4GB),核心物件管理進程屬性,使用者模式記憶體互不相干。為跨越此隔離,Windows 提供多種 IPC 機制,依資料量、同步需求、跨網絡能力、程式複雜度選型。
| # | 技術 | 核心機制 | 適用場景 | 優點 | 缺點/注意 |
|---|---|---|---|---|---|
| 1 | 剪貼板 | 全域共享記憶體 + 視窗訊息通知 | 少量文字/圖片跨應用複製貼上 | 極簡單、CWnd 封裝完善 | 不適合高頻/大資料、易衝突 |
| 2 | 視窗訊息 / WM_COPYDATA | SendMessage 跨進程傳遞結構指標 | 簡單資料傳遞、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 僅支援客戶端 |
| 7 | Windows Socket | TCP/UDP 標準網路 API | 跨機器、跨平台、客戶端/伺服器 | 通用標準、可擴充性最強 | 程式複雜、需處理封包/連線管理 |
| 8 | Internet 通訊 (WinInet/WinHTTP) | HTTP/FTP/Gopher 高層協議 | 下載更新、呼叫 Web API | 支援 Proxy/SSL/快取 | 非即時雙向通訊 |
| 9 | RPC (遠程過程呼叫) | IDL 定義介面、MIDL 編譯 Stub | 企業級分散式系統、跨語言 | 強型別、位置透明 | 學習曲線陡、與 Unix RPC 不相容 |
| 10 | 序列/並行埠 | CreateFile("COM1") + DCB 設定 | 嵌入式裝置、儀器控制、舊系統整合 | 硬體直連、無網路依賴 | 速度慢、程式繁瑣、現代較少用 |
| 11 | COM / DCOM | Proxy/Stub 封送、介面導向 | 元件重用、跨進程/跨機器物件模型 | 二進制相容、版本管理、安全性整合 | 僅能透過介面函式傳資料、部署複雜 |
CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, NAME)OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, NAME)GetLastError() == ERROR_ALREADY_EXISTS 決定誰初始化資料。LPVOID pView = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);CreateMutex(NULL, FALSE, MUTEX_NAME),讀寫前 WaitForSingleObject,完 ReleaseMutex。UnmapViewOfFile(pView); CloseHandle(hMap); CloseHandle(hMutex);WM_COPYDATA。