2008-10-14 73 views
5

在Windows Mobile上的C++項目(即無.NET)中,我正在尋找一種輕鬆地在兩個獨立運行的應用程序之間進行通信的方法。應用程序A將運行一項服務,而應用程序B將爲用戶提供一些功能 - 爲此B必須調用某些功能。我寧願不在COM中執行任何操作。事實上,我寧願不做任何類型的序列化或類似的操作(即,這將排除使用套接字/管道/文件),而是讓B將所有參數和指針傳遞給A,就像A是B的一部分。另外,應用程序C,D和E應該能夠僅執行一次A運行的實例。Windows Mobile上的簡易IPC?

我應該補充一點,B有時應該返回一個數組(或std :: vector或std :: map)到大小先前不知道的地方。

這是可能的Windows Mobile和其他可能的平臺?

回答

14

您不能僅在進程間共享數據。我不推薦COM。 Windows CE中不存在管道。您的最佳路線是memory mapped file(如桌面上)或point to point message queue(與桌面上無關)。哪個更好取決於你的使用場景。

嘗試使用跨進程內存的VirtualAlloc的建議,因爲它是一個不安全的黑客不安全的,不支持CE 6.0或更高版本,所以你最終的Windows Mobile 7和後下破。

我不推薦使用Windows消息和WM_COPYDATA。它速度很慢,而且非常容易出錯。

的人,請不要隨便回答問題,當你不使用的平臺,只是爲了試圖獲得聲望點數。如果你不知道這個平臺,那麼讓其他人幫助那個人,而不是讓他大發雷霆。

+0

謝謝,在閱讀了一些內容之後,我想我只需要堅持使用本地套接字(這應該適用於所有移動平臺) – Steven 2008-10-15 08:51:27

-1

你已經涵蓋了幾乎所有可用的基礎; COM,管道,套接字,內存映射文件。 Windows中的所有進程都有完全獨立的內存空間,所以如果不使用其中一種IPC機制,就不能共享任何內容。

-3

在Windows Mobile上我似乎記得所有進程都映射到同一個地址空間。因此,在具有已知名稱和/或類名的兩個進程中創建消息窗口,並在每個進程中使用FindWindow來查找另一個進程。

然後,使用WM_APP定義的消息ID和指向要在wParam或lParam中傳輸的數據的指針的SendMessage。

如果我錯了,Mobile不分區進程的內存,那麼就使用WM_COPYDATA其中 - 在桌面上使用內存映射,所以是非常快 - 在應用程序之間發送數據。

0

由於您只需要應用程序(B)與服務(A)進行通信,爲什麼不只是使用CreateFileDeviceIoControl以及定義的一組IOCTL?