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이 중간에 들어가 있는게 길이계산이 잘못되는 건지 모르겠습니다.
이걸 어떻게 해결해야 하나요?
|