C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[45935] Re:Re:Data Corrupted on OnCopyData ??? (SendMessage between two application)
alex [] 1376 읽음    2006-07-31 14:34
Thanks for your tips.

Yes. the size was the problem..

   int size = sizeof(SMediaCallInfo) + sCaller.Length() + 1;
   SMediaCallInfo *pData = (SMediaCallInfo *)GlobalAlloc( GPTR, size );

Once i change to this, it works..  :)



nicekr.황경록 님이 쓰신 글 :
: hi alex! :)
:
: alex 님이 쓰신 글 :
: : I am trying to send some messages to other application.
: : But some how whenever i send string value it corrupted and i got wrong value.
: :
: : Can anyone help me out??
: :
: : //===============================================================================
: : From Sender Form..
: : //Test Send Message
: :
: :     COPYDATASTRUCT oCopyData;
: :         LPSTR pCaller = NULL;
: :         SMediaCallInfo *pData = (SMediaCallInfo *)GlobalAlloc( GPTR, sizeof(SMediaCallInfo) );
:
: sizeof(SMediaCallInfo) ? do you check this size of bytes?
:
: :
: :
: :         AnsiString sCaller("Jo.Robbins@hotmail.com");
: :         memset( pData, 0, sizeof(SMediaCallInfo) );
:
: why use the memset? GPTR set the allocated memory area to zero.
: :
: :         pData->dwSize = sizeof(SMediaCallInfo);
: :         pData->dwMediaType = PBXTYPE_SMTP;
: :     pData->dwCallRef = 498 + iCount;
: :
: :         if ( !sCaller.IsEmpty() )
: :         {
: :         pData->lpCallerId = (LPSTR)GlobalAlloc( GPTR, sCaller.Length() + 1 );
: :         strcpy( pData->lpCallerId, sCaller.c_str() );
: :     }
: :
: :     oCopyData.dwData = CALL_INFO_TAG;
: :     oCopyData.cbData = pData->dwSize;
: :     oCopyData.lpData = pData;
: : 
: :     ::SendMessage(Handle, WM_COPYDATA, (WPARAM)Handle, (LPARAM)&oCopyData );
: :
: :     if ( pData->lpCallerId )
: :         ::GlobalFree( pData->lpCallerId );
: :     ::GlobalFree( pData );
: :
: :
: :
: : //===============================================================================
: : //OnCopyData of Form 2 - received data from Form 1
: :
: : COPYDATASTRUCT *pCopyData = (COPYDATASTRUCT *)Msg.LParam;
: :     if ( pCopyData->dwData == CALL_INFO_TAG &&
: :         pCopyData->cbData == sizeof(SMediaCallInfo) )
: :
: :     {
: :         SMediaCallInfo *pInfo = (SMediaCallInfo *)pCopyData->lpData;
: :         if ( pInfo->dwSize == sizeof(SMediaCallInfo) )
: :         {
: :             ODS(DEBUG_INFO, "CallInfo: media=%u, call=0x%08x, caller id=%s",
: :             pInfo->dwMediaType, pInfo->dwCallRef,pInfo->lpCallerId ? pInfo->lpCallerId : "" );
: :     }
: :     }
: : 
: : 17:52:04.49 OnCopyData: recieved message from Desktop
: : 17:52:04.49 CallInfo: media=9, call=0x000001f2, caller id=on7\Tools\      <<= I am expecting  Jo.Robbins@hotmail.com
: :
: : Thanks in advance..
:
: -_-... i append sample application for you.
: just see.. it make two project and send WM_COPYDATA with char pointer.
: if you want to testing with struct or class? just editing :)
: good luck :)

+ -

관련 글 리스트
45924 Data Corrupted on OnCopyData ??? (SendMessage between two application) alex 2470 2006/07/31
45934     Re:Data Corrupted on OnCopyData ??? (SendMessage between two application) nicekr.황경록 2755 2006/07/31
45935         Re:Re:Data Corrupted on OnCopyData ??? (SendMessage between two application) alex 1376 2006/07/31
45936             nice! you're welcome :) (none of changed text) nicekr.황경록 1012 2006/07/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.