Hi,
I have two applications , one is written in MFC and other is written in managed and unmanaged mix code of C++/CLI . MFC application send the data to CLI application. But after one or two times communication it crashed with first chance exception. Maybe i am missing something which you guys can point me for its correction...

MFC Application's Code which communicate
Code:
#define _WM_HEADER_SIZE	(2*sizeof(DWORD)+sizeof(HWND)+sizeof(ULONGLONG))

typedef struct _WM_DATASTRUCTURE{
	DWORD cbSize;
	DWORD iMessage;
	HWND hClient;
	ULONGLONG address;
	_TCHAR Data[_WM_MAXMESSAGE_SIZE - _WM_HEADER_SIZE];	
}WM_DATASTRUCTURE,*LPWM_DATASTRUCTURE;




void SendDataToCLIApp()
{
HWND hd = ::FindWindow(L"CLIAPP",L"CLIAPPS");

		if(!hd)
		{
			
			ShellExecute(NULL,L"open",L"CLIAPP.exe",L"-tRun", NULL, SW_SHOWNORMAL);
			Sleep(4000);
		}
		
		
		if(hd)
		{
			strBuff+="\0";
			TransferData(hd,MSG_SENDFILE,strBuff.GetBuffer(),(STRLEN(strBuff.GetBuffer())*2));
		}
}

BOOL TransferData(HWND hd,DWORD dwMsg, const _TCHAR *Buffer, DWORD dwBytes) 
{
  BOOL bSend;
  COPYDATASTRUCT cpStructData;
  
  dwBytes+=4;
  cpStructData.cbData = dwBytes + _WM_HEADER_SIZE;
  HLOCAL hcl = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT,cpStructData.cbData);
  lpMsg = (LPWM_DATASTRUCTURE)hcl;
  lpMsg->iMessage = dwMsg;
  lpMsg->hClient = NULL;
  lpMsg->cbSize = dwBytes;
  lpMsg->address = m_devices[m_iSelectedDeviceIndex].Address.ullLong;
  cpStructData.lpData = lpMsg; 
  if(Buffer!=NULL){
	  MEMCPY(lpMsg->Data,Buffer,dwBytes);
	  lpMsg->Data[dwBytes-1]='\0';
  }


  bSend = SendMessage(hd,WM_COPYDATA, (WPARAM)hd,(LPARAM)&cpStructData);

  
  return(bSend);
}

And here is CLI application which response

Code:
LPWM_DATASTRUCTURE lpMsg;

	switch (message)
	{
	
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: Add any drawing code here...
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		{
			g_Log->WRITE(L"WM_DESTROY",L"Close Message Came");
			PostQuitMessage(0);
		}
		break;

		
	case WM_COPYDATA:
		{
	
		 g_Log->WRITE(L"WndProc",L"CopyData Called");
		 lpMsg = (LPWM_DATASTRUCTURE)((COPYDATASTRUCT*)lParam)->lpData;
		 g_Log->WRITE(L"GOT DATA",lpMsg->Data);

                wstring strData = lpMsg->Data;

		g_CurrentAddress = lpMsg->address;

    ..............process data .......................

if((lpMsg->Data==NULL)||(lpMsg->Data==INVALID_HANDLE_VALUE))
							LocalFree((HLOCAL)lpMsg);
                 }
break;

Thanks in advance