我们的项目在Windows CE 6.0上运行,并且是用C ++编写的。我们的代码有一些问题,我们无法调试。我们还发现,如果在我们的应用程序中我们创建线程并尝试从它们 printf ,则输出将不会出现。将出现的唯一输出是主线程中的输出。我想做以下事情:
创建自定义Windows消息
使用WPARAM作为我希望在屏幕上显示的字符*的地址
使用LPARAM作为我希望在屏幕上显示的字符*的长度
发送消息
处理它,以便它打印char *
如何创建自定义窗口消息? WPARAM和LPARAM有哪些类型?是否有可能做我刚写的东西?
谢谢
答案 0 :(得分:5)
当然可以做你描述的事情。您无需在应用程序中为通信创建自定义消息实际执行任何操作:只需确保发送消息的代码和接收消息的代码就消息编号的实际内容达成一致,并使用消息与Windows使用的任何数字都不重叠的数字。有一个RegisterWindowMessage()函数,但只需要获取整个操作系统中唯一的消息号,因此用于进程间通信。
实现这一目标的最简单方法是在某处包含一个包含自定义消息编号的头文件,从WM_USER开始并向上编号,如下所示:
#define WM_FIRST_CUSTOM_MSG (WM_USER+0)
#define WM_SECOND_CUSTOM_MSG (WM_USER+1)
当您包含“windows.h”时,会定义WPARAM和LPARAM类型,因此可以在不同的系统上使用不同的类型。对于32位操作系统,它们通常都是32位整数。如果你只是将消息用于测试目的,那通常就足够了,你可以在那里坚持你想要的任何东西。但是对于生产代码,您应该更加小心:WPARAM实际上是“类似整数”的数据,而LPARAM则是“指针式”数据。例如,在Win64中,LPARAM足以容纳64位指针,但WPARAM只保存32位整数。为了传递更多的数据,而不仅仅是一个整数和一个指针,我会使用lParam将指针传递给包含我所有参数的某种结构。
说了这么多,这听起来像是获取调试输出的复杂方法。您是否尝试过使用OutputDebugString()API调用?或调试线程的printf()调用?