Re: WM_COPYDATA between two applications
Hi Anders,
u cant copy data from one process to another. Inprocess
u can handel WM_COPYDATA so:
void CBitmapView::SendCopyData(CLICKEVENT Event,CPoint pt /*=CPoint(0,0)*/)
{
if(!m_pParentWnd || !m_pParentWnd->m_hWnd)
return;
CCrossFocus *pHair = m_gdiobj.GetFocus();
int id=-1;
if(pHair)
{
pt = pHair->GetFocus();
id = pHair->GetId();
}
m_vclick.PosX = pt.x;
m_vclick.PosY = pt.y;
m_vclick.FocusId = id;
m_vclick.PixelUnit = m_gdiobj.GetPixelUnits();
m_vclick.Event = Event;
m_pParentWnd->SendMessage(WM_COPYDATA,(WPARAM)(HWND) m_hWnd,(LPARAM)
(LPVOID) &m_MyCDS);
}
"Anders Eriksson" <andis59@gmail.com> schrieb im Newsbeitrag
news:1s37n3yj1am4g.dlg@ostling.com...
Hello,
I'm running VC++ 2005.
I have two program and want to exchange some data, a string, between them.
In the sender program I have this function:
BOOL CFSGClientDlg::SendCommand(CString command)
{
COPYDATASTRUCT cds;
LRESULT rc;
TCHAR *buf;
buf = new TCHAR[MAX_COPY_LENGTH];
memset(buf,'\0',MAX_COPY_LENGTH);
_tcscpy_s(buf,MAX_COPY_LENGTH,sOrderno.GetBuffer());
sOrderno.ReleaseBuffer();
cds.dwData = 0;
cds.cbData = sOrderno.GetLength()+1;
cds.lpData = (void*)buf;
rc = m_pSCMLaserCWnd->SendMessage(WM_COPYDATA,
(WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(),
(LPARAM)&cds);
if (rc ==NULL)
{
DWORD errcode = GetLastError();
return false;
} // if (rc==NULL)
return true;
}
And in the receiver program I have this:
BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
CString sData=(TCHAR*)(pCopyDataStruct->lpData);
... doing stuff with sData...
return CFrameWnd::OnCopyData(pWnd, pCopyDataStruct);
}
I can see that the string I send is OK, but when I get to the receiving
part I get a couple of characters correkt and then just rubbish...
What have I done wrong?
// Anders
--
English is not my first, or second, language
so anything strange, or insulting, is due to
the translation.
Please correct me so I may improve my English!