5

Windows Mobile の C++ プロジェクト (.NET なし) で、独立して実行されている 2 つのアプリケーション間で簡単に通信する方法を探しています。アプリケーション A はサービスを実行しますが、アプリケーション B はユーザーに何らかの機能を提供します。そのために、B は A の関数の一部を呼び出す必要があります。COM で何かを実装することは避けたいと思います。

実際、私はシリアライゼーションなどを一切行わず (つまり、ソケット/パイプ/ファイルの使用を除外します)、A が B の一部であるかのように、B がすべてのパラメーターとポインターを A に渡すようにしたいと考えています。また、アプリ C、D、および E は、実行中の A のインスタンスを 1 つだけ使用して同じことを実行できるはずです。

B は、サイズが以前に知られていない A に配列 (または std::vector または std::map) を返す場合があることを追加する必要があります。

これは、Windows Mobile やその他のプラットフォームで可能ですか?

4

5 に答える 5

14

プロセス間でデータを共有することはできません。COMはお勧めしません。パイプはWindowsCEには存在しません。最適なルートは、メモリマップトファイル(デスクトップなど)またはポイントツーポイントメッセージキュー(デスクトップなど)のいずれかです。どちらが良いかは、使用シナリオによって異なります。

提案されているように、VirtualAllocでクロスプロセスメモリを使用しないでください。これは安全でないハックであり、CE 6.0以降ではサポートされていないため、WinMo7以降で機能しなくなる可能性があります。

WindowsメッセージとWM_COPYDATAの使用はお勧めしません。それは遅く、ぎこちなく、エラーが発生しやすいです。

人々は、評判ポイントを獲得するためだけにプラットフォームを使用していないときに、質問に答えるだけではいけません。プラットフォームがわからない場合は、ガチョウを追いかけるのではなく、他の誰かに助けてもらいましょう。

于 2008-10-14T12:12:57.487 に答える
0

開始するのに適したソースは次のとおりです-http://msdn.microsoft.com/en-us/library/aa446520.aspx ニーズに最適なオプションを決定します。

于 2008-12-17T22:34:22.573 に答える
0

サービス (A) と通信するために必要なのはアプリケーション (B) だけなので、定義済みの IOCTL のセットを使っCreateFileて andを使用してみませんか?DeviceIoControl

于 2008-11-10T06:34:19.660 に答える
-1

利用可能なほとんどすべてのベースをカバーしました。COM、パイプ、ソケット、メモリ マップ ファイル。Windows のすべてのプロセスは完全に独立したメモリ空間を持っているため、これらの IPC メカニズムのいずれかを使用せずに何かを共有することはできません。

于 2008-10-14T07:15:43.530 に答える
-3

Windows Mobile では、すべてのプロセスが同じアドレス空間にマップされていることを覚えているようです。したがって、既知の名前またはクラス名を使用して両方のプロセスにメッセージ ウィンドウを作成し、各プロセスで FindWindow を使用して他方を見つけます。

次に、WM_APP で定義されたメッセージ ID と、wParam または lParam で送信するデータへのポインターを含む SendMessage。

私が間違っていて、Mobile がプロセス メモリを分割する場合は、WM_COPYDATA を使用します。これは、デスクトップではメモリ マッピングを使用するため、非常に高速であり、アプリ間でデータを送信します。

于 2008-10-14T07:16:45.277 に答える