主程序a:建立一个消息WM_MYMESS 对应的消息处理函数是
OnMyMessEvent(WPARAM wParam, LPARAM lParam)
{
//处理
}
类b要使用消息传递方式要主程序来处理:BYTE *byTemp = new BYTE[MYLENGTH]
class b
{
//对byTemp一些初始化,然后产生一个消息,叫OnMyMessEvent进一步处理 PostMessage(WM_MYMESS,(WPARAM) , (LPARAM) );
}现已经知道利用PostMessage中的WPARAM LPARAM来传递字符串的长度
但目的是怎么样把字符串内容也通过WPARAM LPARAM传递过去呢?思考结果:可以利用这两个参数将字符串的首地址传过去,然后接收处理时根据首地址来读取字符串内容?不知道这样可不可以?具体怎么做?
OnMyMessEvent(WPARAM wParam, LPARAM lParam)
{
//处理
}
类b要使用消息传递方式要主程序来处理:BYTE *byTemp = new BYTE[MYLENGTH]
class b
{
//对byTemp一些初始化,然后产生一个消息,叫OnMyMessEvent进一步处理 PostMessage(WM_MYMESS,(WPARAM) , (LPARAM) );
}现已经知道利用PostMessage中的WPARAM LPARAM来传递字符串的长度
但目的是怎么样把字符串内容也通过WPARAM LPARAM传递过去呢?思考结果:可以利用这两个参数将字符串的首地址传过去,然后接收处理时根据首地址来读取字符串内容?不知道这样可不可以?具体怎么做?
要注意的是,避免内存泄露。
WPARAM为数组的首地址,在a中接收时强制转换成(BYTE *)类型。LPARAM为数组的长度。
OnMyMessEvent(WPARAM wParam, LPARAM lParam)//lParam放的是首地址
{
int nTemp = wParam; //长度,这个得到没什么问题
BYTE *byMyTemp;
byMyTemp = new BYTE[nTemp];
//byMyTemp = lParam;
}怎么样得到lParam中的首地址信息?
或者:
memcpy(byMyTemp,lParam,nTemp);
BYTE *byMyTemp;
byMyTemp = new BYTE[nTemp];
//byMyTemp = lParam;
strcpy((char*)byMyTemp,(char*)lParam);
但是这样就有错了:
strcpy((BYTE*)byMyTemp,(BYTE*)lParam);
就有错误,这是什么道理啊?
还有啊,能不能得到byMyTemp的长度?
{
int nTemp = wParam; //长度,这个得到没什么问题
BYTE *byMyTemp = (BYTE *)lParam; .....使用byMyTemp做一些事情...
delete [] byMyTemp;
}
如果使用strcpy((char*)byMyTemp,(char*)lParam);
那就变成char类型了,例如0xD5这些数据就会出错
int nTemp = wParam; //长度,这个得到没什么问题
BYTE *byMyTemp = (BYTE *)lParam;.....使用byMyTemp做一些事情...
delete [] byMyTemp;这里的delete []操作是不是可以的?前面没有new操作啊?
2. 如果包含了二进制数据,不要使用strcpy,请使用memcpy进行复制.
BTW: 看你的疑问,多说一句,指针可以被认为是一个DWORD型的普通变量.这个变量的值是一个内存地址.
所以有如下一段:
变量一 = new ***..
变量二 = 变量一
delete 变量二 等价于 delete 变量一