2016-08-03 20 views
2

WM_COPYDATAを使用してあるアプリケーションから別のアプリケーションにデータを送信しようとしています。両方のアプリはコンソールで、ウィンドウはありません。私はユーザーメッセージをうまく送信できます。私は、WM_COPYDATAを送信しようとすると、データ構造を設定するかどうか、私は基本的に同期メッセージ呼び出しを使用して送信する必要があると言うエラー1159を取得...まだSendThreadMessageはありません。WM_COPYDATA、PostThreadMessage、およびError 1159

これはapiまたはdocsの見落としですか?ウィンドウなしのスレッドのみを使用してWM_COPYDATAを使用する方法はないようですね。

+0

メッセージループを含めて、送受信コードを表示してください。 – Ari0nhh

+0

'WM_COPYDATA'は非同期に送信できないため、ウィンドウが必要です。 –

+0

プロセス間通信のもう1つの一般的な方法は、[パイプ](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365780.aspx)(または[named pipes](https:// msdn .microsoft.com/ja-us/library/windows/desktop/aa365590.aspx))。これは、シナリオに適しています。 – IInspectable

答えて

4

WM_COPYDATAは、送信のみでき、送信することはできません。ペイロードはプロセス間でマーシャリングされるため、そのマーシャリングをサポートするために一時的なデータ構造が作成されます。メッセージ処理が完了したら、それらを破壊する必要があります。これは、メッセージを同期して配信する必要があることを意味します。

これはすべてPostThreadMessageを使用できないことを意味します。代わりに、そのようなメッセージの受信者として機能するウィンドウを作成する必要があります。このウィンドウはmessage-only windowにすることができ、表示する必要はありません。

+0

これで、PostThreadMessageを使ってデータをストリーミングできます。一番簡単な方法だと思う。私はパフォーマンスは必要ありません、ちょうど転送。 – AbstractDissonance

関連する問題