char msg[] = "hello world";
SendMessage(HWND_BROADCAST,Msg, 0,(LPARAM)msg);
LRESULT CDakaileDlg::OnMsg(WPARAM wParam,LPARAM lParam)
{
  char * pMsg = (char*)lParam;
  CString msg = pMsg;
}

考虑到局部变量问题,不要用PostMessage.
SendMessage(.., ., ., (LPARAM)str.GetBuffer());
str.ReleaseBuffer();

PostMessage把消息放入消息队列即返回,目标窗口可能还没有处理消息。由于传递的是局部变量指针,在函数返回后变量即不存在。如果这时目标窗口处理消息肯定出错。
你可生成一个在堆中分配的字符串:

class CMsgAndRef
{
     CString m_Msg;
     int     m_nRef;//用于指定引用此字符串的窗口的个数
};

CMsgAndRef * objMsg=new CMsgAndRef;

objMsg->m_Msg="hello world";
objMsg->m_nRef=4;//如果你要广播的窗口有4个的话

PostMessage(HWND_BROADCAST,Msg,(WPARAM)objMsg,0);

LRESULT CDakaileDlg::OnMsg(WPARAM wParam,LPARAM lParam)
{
    CMsgAndRef *objMsg=(CMsgAndRef *)wParam;
    CString YourMsg=objMsg->m_Msg;
    if(--objMsg->m_nRef==0)
    {
        delete objMsg;
        objMsg=NULL;
     }
}

CString s="ABC";
unsigned char *puc = (unsigned char*)s.GetBuffer(s.GetLength());
s.ReleaseBuffer();

CString strTemp = "askdlfj";
char * pCh;
pCh = (LPTSTR)(LPCTSTR)strTemp;

char *a;
CString s;
strcpy(a, s);

CString str;
char *p;
p=(char*)(LPCTSTR)str;