Q&A

  • PostMessage에 String인자를 넣어서.. 받기..
PostMessage를 보내려 하는데요.. parameter는 dir경로를 보내려고 합니다..
dir경로의 주소값을 PostMessage의 LParam실어서.. 보낸다음..

받을때는 주소값을 가지고.. dir경로를 얻어내야 하는데..
어떻게 받아야 하는지요?
다음과 같이 코딩했는데 잘 안됩니다.. 글자 깨집니다..

부탁드립니다... 이상 초보가..



====== 보내는쪽 ========

var
PM3uDir: PChar;
begin
PM3uDir := PChar( 'c:\aaaa\aa.lst' );
PostMessage( Handle, WM_MEDIAPLAYER_PLAY, WPARAM_M3UDIR, LongInt(@PM3uDir) );





======= 받는쪽 ========


procedure TClientMain.WndProc(var message: TMessage);
var
PStr: PChar;
m3uDir: String;
begin
inherited;
case ( message.Msg ) of
   WM_MEDIAPLAYER_PLAY :
     begin
       PStr := PChar( message.LParam );
       m3uDir := StrPas( PStr );
       ShowMessage('play, address:'+IntToStr(message.LParam)+', dir='+m3uDir);
     end;
end;
end;
1  COMMENTS
  • Profile
    이중철 2004.07.06 01:08
    밑에 소스 틀릴수도 있는데 그건 타입캐스팅 문제이니 알아서 해결을
    해주세요
    원칙은 보내기 전에 디렉토리 정보를 담을 메모리장소를 확보하고
    그 포인터를 보내는 거고 받는쪽은 그것을 받고 메모리장소를 다시
    환원하는것 입니다.

    var
    PM3uDir: PChar;
    begin
      GetMem(PM3uDir, 255);
      strpcopy(PM3uDir, 'c:\aaaa\aa.lst') ;
    PostMessage( Handle, WM_MEDIAPLAYER_PLAY, WPARAM_M3UDIR, LongInt(PM3uDir) );


    procedure TClientMain.WndProc(var message: TMessage);
    var
    PStr: PChar;
    m3uDir: String;
    begin
    inherited;
    case ( message.Msg ) of
       WM_MEDIAPLAYER_PLAY :
         begin
           PStr := PChar( message.LParam );
           m3uDir := StrPas( PStr );
           ShowMessage('play, address:'+IntToStr(message.LParam)+',    dir='+m3uDir);
           FreeMem(PStr, 255);
         end;
    end;
    end;