在Unicode下
tempBuf 为char *
::PostMessage(hwnd,WM_XXXXXX,0,(LPARAM)tempBuf)发一个自定消息
 
消息响应函数里 
CString str;
str.Format(_T("%d"),lParam);
但输出为乱码
请问 lParam转CString 该如何转

解决方案 »

  1.   


    char *tempBuf = "测试";WCHAR *pwszTemp = NULL;
    int nLen = MultiByteToWideChar(CP_ACP, 0, tempBuf , -1, NULL, 0);
    pwszTemp = new WCHAR[nLen+1];
    pwszTemp[nLen] = L'\0';
    MultiByteToWideChar(CP_ACP, 0, tempBuf , -1, pwszTemp, nLen);::PostMessage(hwnd,WM_XXXXXX,0,(LPARAM)pwszTemp);CString str;
    str.Format(_T("%s"),lParam); 
    delete lParam;
    lParam = NULL;
      

  2.   

    由于PostMessage是不等待返回的,所以首先要保证PostMessage发送的缓冲区的生存周期至少比处理函数要长。
    其次既然发送的是字符串,你用%d来格式化,只能是一个地址,要说乱码应该是不会的。先要将lParam当作char*类型的字符串,然后用MultiByteToWideChar或者A2T宏进行编码转换,然后赋值给CString类型变量就可以了,或者试试:
    CString str((char*)lParam);