7

私たちのプロジェクトはWindowsCE6.0で実行されており、C++で記述されています。コードに問題があり、デバッグできません。また、アプリケーションでスレッドを作成し、それらからprintfを実行しようとすると、出力が表示されないこともわかりました。表示される唯一の出力は、メインスレッドからの出力です。私は次のことをしたいと思います:

  • カスタムWindowsメッセージを作成する

  • WPARAMとして、画面に表示したい文字のアドレスを使用します*

  • LPARAMとして使用する文字の長さ*画面に表示したい

  • メッセージを送信する

  • それが来たらそれを処理して、char*を印刷します

カスタムWindowsメッセージを作成するにはどうすればよいですか?WPARAMとLPARAMの種類は何ですか?私が今書いたことをすることは可能ですか?

ありがとう

4

1 に答える 1

7

あなたが説明したことをすることは確かに可能です。アプリケーション内で通信するためのカスタムメッセージを作成するために実際に何もする必要はありません。メッセージを送信するコードとメッセージを受信するコードが実際のメッセージ番号と一致していることを確認し、メッセージを使用してください。 Windowsが使用する番号のいずれとも重複しない番号。RegisterWindowMessage()関数がありますが、これはオペレーティングシステム全体で一意のメッセージ番号を取得するためにのみ必要であるため、プロセス間通信に使用されます。

これを実現する最も簡単な方法は、カスタムメッセージ番号を含むヘッダーファイルをどこかに置くことです。これは、WM_USERで始まり、次のように上に番号が付けられます。

#define WM_FIRST_CUSTOM_MSG (WM_USER+0)
#define WM_SECOND_CUSTOM_MSG (WM_USER+1)

WPARAMおよびLPARAMタイプは、「windows.h」を含めるときに定義されるため、システムごとに異なるタイプを持つことができます。32ビットオペレーティングシステムの場合、通常は両方とも32ビット整数です。テスト目的でメッセージを使用しているだけの場合は、通常はそれで十分であり、そこに好きなものを貼り付けることができます。ただし、実動コードの場合は、もっと注意する必要があります。WPARAMは実際には「整数のような」データ用であり、LPARAMは「ポインターのような」データ用です。たとえば、Win64では、LPARAMは64ビットポインタを保持するのに十分な長さですが、WPARAMは32ビット整数のみを保持します。整数とポインターだけでなく、より多くのデータを渡すには、lParamを使用して、すべての引数を含むある種の構造体にポインターを渡します。

そうは言っても、デバッグ出力を取得する複雑な方法のように聞こえます。OutputDebugString()API呼び出しを使用してみましたか?または、スレッドのprintf()呼び出しをデバッグしますか?

于 2008-11-16T09:48:05.173 に答える