데이터를 전송할때
copyDataStruct.cbData := Length(sendString) + 1;
이렇게 했는데요.
이 부분을
copyDataStruct.cbData := (Length(sendString) + 1) * 2;
이렇게 수정하니 정상적으로 데이터가 들어오네요.
64비트 윈도우에서 32비트로 컴파일해서 그런게 아닌가 의심스러운데
만일 OS문제라면 소스코드에서 OS가 몇 비트OS인지 검사해야 하지 않을까요?
그런데 문제는 제가 OS가 몇비트인지 검사하는 방법을 모르겠습니다. ㅡ,.ㅜ
첫눈 님이 쓰신 글 :
: ================================= 전송부 ============================
:
: var
: copyDataStruct: TCopyDataStruct;
: sendString : String;
: begin
: sendString := '1234567890';
:
: copyDataStruct.dwData := 0;
: copyDataStruct.cbData := Length(sendString) + 1;
: copyDataStruct.lpData := PChar(sendString);
:
: RemoteHWND := FindWindow('TForm1','TestWin');
: SendMessage(RemoteHWND, WM_COPYDATA, Application.Handle, Integer(@copyDataStruct)) ;
: end;
:
:
: ================================= 수신부 ============================
:
: private
: procedure WMCopyData(var Msg: TMessage); message WM_COPYDATA;
:
: ....
:
: procedure TForm1.WMCopyData(var Msg: TMessage);
: var
: copyDataStruct : PCopyDataStruct;
: dwData : Integer;
: DataLength : Integer;
: getData : String;
: begin
: copyDataStruct := Pointer(Msg.LParam);
: dwData := copyDataStruct.dwData;
: DataLength := copyDataStruct.cbData;
: getData := PChar(copyDataStruct.lpData);
: ShowMessage(getData); <============= 여기서 '1234567890'이 아닌 '12345'까지만 나옵니다.
: end;
:
:
: 보낼때는 '1234567890'이라고 보냈는데 받을때는 '12345'까지만 받고 가끔씩 데이터의 뒷부분이 이상한 글자로 나올때도 있습니다.
:
: 어디가 잘못된건가요?
:
: 설마 OS가 Win7 64Bit라 그런건 아니겠죠?
|