흐르는 시간의 블로그...

출처 :http://blog.yg.pe.kr/218

1. 설명
WM_COPYDATA메시지를 이용해 다른 프로그램에 데이터를 전달한다.
단순 스트링 전달과 레코드 전달 예제로 구분했음

2. 소스
--단순 String 전달--

1. lParam에 사용할 데이터 레코드 타입
pCopyDataStruct = ^TCopyDataStruct;
TCopyDataStruct = record
dwData: DWORD;
cbData: DWORD;
lpData: Pointer;
end;

2. lParam으로 전달된 데이터 읽기
strReceive := pChar(pCopyDataStruct(lParam)^.lpData);


3. 데이터 보내기

procedure TCommWndThread.SendData(AData: string);
var
CopyData: TCopyDataStruct;
nLen: integer;
begin
nLen := Length(AData) + 1;
AData := AData + #0;
with CopyData do
begin
cbData := nLen;
lpData := pChar(AData);
end;
SendMessage(FWnd, WM_COPYDATA, 0, LongInt(@CopyData));
end;



--레코드 전달--

1. 전달할 레코드 타입
pMemoDataStruct = ^TMemoDataStruct;
TMemoDataStruct = packed record
FSenderID: String[50];
FIP: String[20];
FPort: String[10];
MemoContent : array[1..1024] of char;
end;

2. 데이터 보내기

var
CopyData: TCopyDataStruct;
nLen: integer;
memoinfo : TMemoDataStruct;
begin
FillChar(memoinfo, sizeof(TMemoDataStruct), #0);
memoinfo.FSenderID := FSenderID;
memoinfo.FIP := FIP;
memoinfo.FPort := FPort;
Move(FMemo^,memoinfo.MemoContent,FMemoSize);
nLen := SizeOf(memoinfo);
with CopyData do
begin
cbData := nLen;
lpData := @memoinfo;
end;
SendMessage(wnd, WM_COPYDATA, LongInt(msgType), @CopyData);
end;

3. 데이터 받기
var
memoinfo : TMemoDataStruct;
begin
memoinfo := pMemoDataStruct( PCopyDataStruct(msg.LParam)^.lpData)^;
end;