Computer/Delphi
델파이에서 WM_COPYDATA 이용한 데이타 전달
Gu Youn
2003. 4. 15. 23:22
1. 설명
WM_COPYDATA메시지를 이용해 다른 프로그램에 데이터를 전달한다.
단순 스트링 전달과 레코드 전달 예제로 구분했음
2. 소스
--단순 String 전달--
1. lParam에 사용할 데이터 레코드 타입
2. lParam으로 전달된 데이터 읽기
3. 데이터 보내기
--레코드 전달--
1. 전달할 레코드 타입
2. 데이터 보내기
3. 데이터 받기
WM_COPYDATA메시지를 이용해 다른 프로그램에 데이터를 전달한다.
단순 스트링 전달과 레코드 전달 예제로 구분했음
2. 소스
--단순 String 전달--
1. lParam에 사용할 데이터 레코드 타입
pCopyDataStruct = ^TCopyDataStruct;
TCopyDataStruct = record
dwData: DWORD;
cbData: DWORD;
lpData: Pointer;
end;
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;
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;
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;
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;
memoinfo : TMemoDataStruct;
begin
memoinfo := pMemoDataStruct( PCopyDataStruct(msg.LParam)^.lpData)^;
end;