2003. 4. 15. 23:22

델파이에서 WM_COPYDATA 이용한 데이타 전달

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;
Trackback 1 Comment 0