由于字符集的关系,如果系统是使用unicode字符集可能转换有问题,所以造成之前文章的发送数据时候只能发送第一个,后面的转换不了,现在使用char *来发送就没有问题了。
发送端
char* CStringToCharArray(CString str)
{
char *ptr;
#ifdef _UNICODE
LONG len;
len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
ptr = new char [len+1];
memset(ptr,0,len + 1);
WideCharToMultiByte(CP_ACP, 0, str, -1, ptr, len + 1, NULL, NULL);
#else
ptr = new char [str.GetAllocLength()+1];
sprintf(ptr,_T("%s"),str);
#endif
return ptr;
}
void tcpsenda1(CString a1,CString a2)
{
CString m_strCopyData;
m_strCopyData=L"|" + a1 + L"|"+ a2 + L"|";//自定义发送的数据
char * aa=CStringToCharArray(m_strCopyData);
CWnd *pWnd=CWnd::FindWindow(NULL,L"AAAA");
COPYDATASTRUCT cpd;
cpd.dwData=1;
cpd.cbData= strlen(aa);
cpd.lpData=(void*)aa;
if (pWnd != NULL && cpd.cbData > 0)//找到窗口才发送
pWnd->SendMessage(WM_COPYDATA,NULL,(LPARAM)&cpd);//注意这里不能用PostMessage,因其是异步函数,接收端没有收到就会返回
}
接收端请参看之前的文章。