수신부분
{*********************************************************
명칭: RxWindowHook1AfterMessage
목적: 수신쓰레드에서 받은 메세지를 처리하는 함수
내용: 1. 메세지를 Case별로 분기하여 준다.
*********************************************************}
<!--
procedure TfrmRoomList.RxWindowHook1AfterMessage(Sender: TObject;
var Msg: TMessage; var Handled: Boolean);
var
RcvStr : String;
sType : String;
begin
case Msg.Msg of
WM_COPYDATA :
begin
RcvStr := StrPas(PChar(PCopyDataStruct(Msg.LParam)^.lpData));
sType := Copy( RcvStr, 3, 5 );
if sType = REP_CHAT_SERVER then SetChatServerInfo( RcvStr )
else if sType = REP_CHAT_ROOMINFO then GetRoomInfo( RcvStr )
else if sType = REP_CHAT_MAKE_ROOM then AddRoom( RcvStr );
end;
end;
end;
-->
==================================================================
송신부분
<--
procedure TClientRecvThread.RecvPacketEX;
var
DataBuf : TCopyDataStruct;
nLen : Integer;
begin
//
SndStr := FMessage;
nLen := Length(SndStr) + 1;
SndStr := SndStr + #0; //종료문자열 추가해줘야 함
with DataBuf do
begin
DwData := 9;
cbData := nLen;
lpData := pChar(SndStr);
end;
SendMessage(FHandle, WM_COPYDATA, 0, LPARAM(@DataBuf));
end;
-->
수신부와 송신부 소스입니다....
무슨 이유인지 보내는 부분에서는 디버깅으로 데이터를 확인했는데 이상없이 보내고 있습니다.
그런데 받는 부분에서 일부분만 넘어오네요...
ㅠㅠ
이유를 잘 모르겠습니다...
고수님들 좀 도와주세요~~
참고로 저 문자열은 소켓으로 받은 데이터입니다....^^
즐프하세요~
String을 WM_COPYDATA로 다른 Application에 전달하려고 한다면
그냥 PChar로 하지 마시구요
char 버퍼를 잡아서 그 버퍼에다가 String의 내용을 copy하신후에
char버퍼의 포인터를 WM_COPYDATA로 넘기세요