問題タブ [wm-copydata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - WM_COPYDATA が文字列を正しく配信しない
WM_COPYDATA を使用して、あるウィンドウから別のウィンドウに文字列を送信しようとしました。メッセージは受信ウィンドウで完全に受信されます。私が送信する文字列を除いて、そのままではありません。
送信アプリケーションのコードは次のとおりです。
そして、これは受信側アプリケーションのコードです:
これで、呼び出されたメッセージボックスが漢字を出力するようになりました。
私の推測では、正しく変換しなかったか、実際には文字列を送信せず、文字列へのポインターのみを送信したため、受信者のウィンドウにまったく異なるデータが表示された可能性があります。私はそれを修正する方法がわかりません。
c# - WM_COPYDATA を介して受け取った C 構造体を C# 構造体にマーシャリングすると、プロシージャが終了します。
これが私の問題です。C 構造体を C# 構造体にマーシャリングしようとしています。C 構造体は、WM_COPYDATA メッセージを介して C アプリケーションから C# アプリケーションに送信されます。メッセージの送信と確認は問題なく、問題なく動作します。
C アプリケーションをデバッグで実行し、別のデバッガーを C# アプリケーションに接続して、メッセージを送信します。それは正しく受信され、識別されますが、データをマーシャリングしようとすると、Marshal.PtrToStructure 関数は残りの部分を実行する前に switch ステートメントを終了するようです (コード内のマークされた行を参照)。
したがって、手順manageComplexMessage
は実行されず、データは生のままで使用できません。
これは、C# で使用する CopyDataStruct です。
これは、WM_COPYDATA を介して送信されたデータを格納するために C# で使用する構造体です。
WM_COPYDATA メッセージを処理するメソッド:
C# アプリケーションにデータを送信するために C で使用する構造体:
最後に、メッセージを送信する手順:
文字列の配列をマーシャリングするときに問題があると思われますが、問題が見つかりません。
ご協力ありがとうございました!誰かが何が悪いのか教えてくれるか、正しい方向に向けてくれることを願っています!
編集:さらにテストした後、構造体の整数部分と倍精度部分は完全に正常に動作します。また、単一の文字列を送信すると機能します。文字列の配列を送信しようとしたときにのみクラッシュします。問題は、文字列配列の MarshalAs ステートメントにありますが、適切に記述する方法がまだわかりません。
delphi - メッセージ (WM_COPYDATA) を受信するにはどうすればよいですか?
多くのフォームを持つアプリケーションにメッセージ WM_COPYDATA を送信していますが、受信できません。フォームが 1 つの単純なアプリケーションは問題なく動作します。
このコードはメインフォームにあります。メッセージを受信していません
アプリケーションとメインフォームのハンドルを確認しました。したがって、ハンドルは次のようになります。
アプリケーションハンドルに送信されたメッセージはメインフォームにリダイレクトされるという Don's answer のhere( Delphi: What is Application.Handle? ) を読みましたが、私の状況ではそれは起こりません。メッセージを受信するにはどうすればよいですか? メッセージがメイン フォームにリダイレクトされないのはなぜですか?
Delphi XE8、Windows 10 でのテスト
c++ - COPYDATASTRUCT の lParam を定義する方法は?
だから私はちょっとこれに従った:
https://msdn.microsoft.com/en-us/library/ms649009(v=vs.85).aspx
この:
WM_COPYDATA を使用してプロセス間でデータを送信する
openframeworks アプリケーションと unreal エンジンの間でデータを送信する場合 4. lParam が定義されていないというエラーが発生する理由が見つからないことを除けば、すべて問題ないようです。それはおそらく簡単なことですが、私はそれを行う方法を見つけることができません。
アンリアル エンジン 4 では、(テスト目的で) 10 秒ごとにメッセージを送信するアクターがあります。
一部のコードはまだ少しラフですが、最初に動作させようとしていただけです。
また、openframeworks でメッセージを受信するためのコードも作成しました。これを行う方法が正確にわからなかったので、これを ofApp.cpp の update 関数に追加しました
lParam が定義されていないため、これは機能しません。また、LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) で何かをしようとしました
しかし、私はこれに慣れておらず、使用方法がわかりません。私のエラーはなくなりましたが、メッセージは受信されませんでした...私は次のように使用しましたが、おそらく間違っています:
これを達成するためのヒントはありますか?おそらく本当に単純ですが、明確な情報が見つかりません。ありがとう!
c++ - LRESULT をカスタム構造体型にキャストする方法は?
私はsendMessage
とを使用replyMessage
して、同じラップトップの 2 つのアプリ間で通信します。受信側では、送信者からのメッセージを受信すると、メッセージを返信します。したがって、送信者プロセスでは、MyStruct
LRESULT にキャストし、これを送信者アプリに返信します。レシーバー側でキャストバックしようとしましたが、これも機能します。
MyStruct
ただし、送信側でこの LRESULT をキャストしようとすると、失敗します。
送信者側で LRESULT をカスタム構造体に変換するにはどうすればよいですか?
ちなみに、整数または浮動小数点数を送信しようとしました。できます。ただし、カスタム struct を使用MyStruct
すると機能しません。LRESULT のサイズが よりも短いためだと思いMyStruct
ます。この問題を解決するにはどうすればよいですか? LRESULT のサイズは 4、int のサイズも 4 です。
java - JNA : COPYDATASTRUCT の正しいマッピング?
私はそれを機能させるのに多くの苦労をしました(win32 APIへの呼び出し:データを保持するためのWM_COPYDATAおよびCOPYDATASTRUCTを使用したSendMessage)。現在、Windows 7コンピューターで機能するため、マッピングが適切かどうか疑問に思っています。私のソリューションの副作用はありませんか?
これが私のコードです:
そして、2 つの例を含む呼び出しコード:
重要なことは、私がネット上で見つけたすべてのものと比較したこのコードです。COPYDATASTRUCT 属性cbData の型が long であることです。intにするとうまくいきません(レガシCアプリのWndProcでデータが正しく受信されない)。DWORD を長い Java タイプにマップするのは正しいですか? NativeLong の方が良いでしょうか?
注意すべきもう 1 つのことは、インスタンス化されたすべての構造体 (myStruct および myDataStruct) に対する Structure.write() への明示的な呼び出しです。SendMessage API を呼び出す前にメモリが空にならないようにするために必要です。普通だと思いますか?または、jna は SendMessage を呼び出す前に自動的に呼び出す必要がありますか?
前もって感謝します。