Ваша CString может быть в структуре, но память для ее хранения выделена в куче. Здесь вы должны перейти на низкую технологию: поместите массив wchar (или char, или TCHAR в зависимости от ваших желаний) в структуру ShareMessage и скопируйте содержимое строки в этот массив. В коде вашего получателя прочитайте строку из массива wchar. О, и вы отправили адрес вашей структуры, а не COPYDATASTRUCT, и отправили его себе, а не другому диалогу. измените вызов SendMessage следующим образом:
SendMessage (hWnd,WM_COPYDATA,(WPARAM)hwnd,(LPARAM)(LPVOID)&cData);
Кроме того, вы УВЕРЕНЫ, что вызов FindWindow работает? Это название класса выглядит очень подозрительно для меня. Лучше использовать NULL и полагаться на заголовок окна. У меня есть смутное воспоминание, что диалоги MFC имеют фиксированное имя класса.
Тогда ваш код должен работать.
Например:
typedef struct ShareMessage
{
wchar szMyString [100];
int myValue;
}MYDATA;
void CCopyDataDlg::OnBnClickedOk()
{
MYDATA myData;
COPYDATASTRUCT cData;
ZeroMemory (&myData, sizeof(myData);
wcscpy (myData.szMyString, (L"Rakesh"));
cData.dwData = ORGININFO;
cData.cbData = sizeof(myData);
cData.lpData = &myData;
...
Я не проверял этот код, он у меня в голове. Я предположил wchar, потому что вы использовали модификатор L в вашей константной строке.
Кроме того, в коде вашего получателя есть эта строка:
if (WM_COPYDATA != NULL)
что не имеет смысла. Я предполагаю, что вы хотели проверить полученный номер сообщения с константой WM_COPYDATA.