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

델파이 Q&A
Delphi Programming Q&A
[15382] TStringList를 WM_COPYDATA로 전송하는데 문자가 깨져서 보입니다.
첫눈 [hadugo] 1966 읽음    2015-01-13 21:10
StringList를 다른 어플리케이션으로 전송하려 합니다.
전송하는 쪽에서는 아래와 같이 코딩했구요.

     var
          sendData: TStringList;
          dataBuf: TCopyDataStruct;
     begin
          ...
          ...
          sendData := TStringList.Create;
          sendData.Add('안녕하세요?');
          sendData.Add('안녕히 계세요.');
          sendData.Add(다음에 또 만나요.');
          dataBuf.dwData := 0;
          dataBuf.lpData := PChar(sendData.Text);
          dataBuf.cbData := Length(sendData.Text);
          ...
          ...
     end;


수신하는 쪽의 소스코드는 아래와 같습니다.

     procedure WMCopyData(var Msg: TMessage); message WM_COPYDATA;


     procedure WMCopyData(var Msg: TMessage); message WM_COPYDATA;
     var
          dataBuf : PCopyDataStruct;
          GetStr  : String;
     begin
          dataBuf := Pointer(Msg.LParam);
          GetStr := PChar(dataBuf.lpData);
          getData.Text := GetStr;
          Memo1.Lines.Add(getData[0]);
          Memo1.Lines.Add(getData[1]);
          Memo1.Lines.Add(getData[2]);
     end;


이렇게 했는데
받는쪽에서
문자열의 일부만 들어옵니다.

          Memo1.Lines.Add(getData[0]);
여기까지는 이상이 없구요.

          Memo1.Lines.Add(getData[1]);
여기서 문자열의 앞부분만 나오고 뒷부분 일부가 짤려버립니다.

          Memo1.Lines.Add(getData[2]);
여기서는 getData[2]값이 없어서 에러가 나버리구요.

아마 전송할때
          dataBuf.cbData := Length(sendData.Text);
이 부분에서 길이가 잘못 계산된것 같은데요.

한글때문에 그런건지 #13#10이 중간에 들어가 있는게 길이계산이 잘못되는 건지 모르겠습니다.
이걸 어떻게 해결해야 하나요?

+ -

관련 글 리스트
15382 TStringList를 WM_COPYDATA로 전송하는데 문자가 깨져서 보입니다. 첫눈 1966 2015/01/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.