看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) vs2010 - mfc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) no 問題(Question): IPC 考慮到 32/64 問題時,問題幾乎都指向同一個地方 : 資料型態截斷問題 (如 LPVOID , size_t , HANDLE),故有點苦惱在考慮Performance 之後該怎取捨。 以下為我所知道 Windows 下 IPC 方法,後面也備註考慮跨 32/64 平台時可能 遇到的問題,我這裡的 IPC 比較像是 Client.exe 單向 Server.exe 要一大筆 陣列資料回來 ( 暫時考慮 10~20 MB ),(要回來後 "可能" 會有後續處理) , 這動作會頻繁,所以必須考慮通訊時之 Performance issue 。 (1) WM_COPYDATA (1.1) 響應函式有一參數是 Pointer, 導致不相容。 (1.2) COPYDATASTRUCT 裡面含指標,導致大小不同不相容。 (2) ClipBoard (2.1) ClipBoard 看起來是沒問題的,待實作。 (2.2) ClipBoard 在資料量大時效能會低落 (像小畫家就會了) (2.3) 這點想額外再問,如果是傳 raw data 時可以做, 那如果是 CF_BITMAP 這類資料會有問題嗎?? (3) File Mapping (Share Memory) (3.1) HANDLE , LPVOID 跨平台問題 (4) COM (4.1) 包這個嫌麻煩,暫時略過。若這是最好的方案,那也跑不掉。 (5) winsock (5.1) 這點大概是最穩的方法,但要經過網路,速度有限。 (6) Mail Slot (6.1) HANDLE 跨平台問題 (7) SendMessage (7.1) 這點其實是我的問題,我想做像是 SendMessage(hWnd , WM_USER + 1 , pBuf , iBufSize, 0); 的東西,有點像是 WM_GETTEXT 的功能,Client 提供 Buffer 後,Server 就把資料塞進去,發現似乎沒法達成,請問這種 概念是否有辦法實現? ---- named pipe , DDE 還沒實作過 , 想請教有這部份開發經驗的網友,請問 過去是採用怎樣的機制達到 32-bit / 64-bit IPC ? 另 "曾" 想過, 是否只要確保 64-bit 端之 AP ,產生之 HANDLE , Pointer 前 32 bits 為 0,上述的 HANDLE, LPVOID 問題便可順利解決截斷問題?若是 的話,請問有什麼方法可以達成這需求 ? 在全域開靜態陣列達得到嗎(不知道 是不是有保證)? 以上,問題有些多,有先翻過閱過 MSDN 一些文章, 可討論的地方還是覺得不少,希望有意見便不吝提出。 最後謝謝各位的耐心閱讀與不吝指教,感激不盡。 -- 「自從我學了 C# , 人都變聰明 , 考試都考一百分」 「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」 「自從我學了 Java , 明顯變壯 , 個子也變高了 」 「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」 < Kuso 星爺語錄 > -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.169.158 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1442427499.A.8C3.html
Dforce: 我有用named pipe 有點像是IOCP架構的感覺 09/17 09:25
EdisonX: 感謝, 不過我發現 Pointer 的傳遞似乎不是我想像那樣,感 09/17 22:03
EdisonX: 覺像是有處理過 , 所以 64b/32b 竟然可用 COPYDATA 完成 09/17 22:03
troylee: protobuf? 09/18 01:09
EdisonX: protobuf 是 protocal buffer? 09/18 21:37
EdisonX: 話說我試了mailsolt還蠻快的 重點也跨過去了,謝謝各 09/18 21:38
EdisonX: 位。 09/18 21:38