7

我们的项目在 Windows CE 6.0 上运行,并且是用 C++ 编写的。我们的代码有一些问题,我们无法调试。我们还发现,如果在我们的应用程序中创建线程并尝试从中printf,输出将不会出现。将出现的唯一输出是来自主线程的输出。我想做以下事情:

  • 创建自定义窗口消息

  • 使用 WPARAM 我想在屏幕上显示的 char* 的地址

  • 使用 LPARAM 我想在屏幕上显示的 char* 的长度

  • 发送消息

  • 当它出现时处理它,以便它打印 char*

如何创建自定义窗口消息?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 回答