다음의 코드를 실행하면
다 정상적으로 처리하고 나서 끝에 이상하게 에러가 납니다.
즉 Procedure내에서는 에러가 않나고,결과도 정상적으로 내는데
이상하게 마지막에 에러사인이 뜹니다.
왠지 모르겠네요 .....
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure process(var pp:tmessage); message wm_user+400 ;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.process(var pp:tmessage) ;
var
a:pchar ;
b:string ;
begin
getmem(a,pp.LParam+1) ;
move( (@pp.wparam)^ ,a,pp.LParam ) ;
try
memo1.lines.add(strpas(a)) ;
except
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:pchar;
k:integer;
begin
getmem(a,7) ;
a:='sdfsdf' ;
k:=integer(a) ;
SendMessage( self.handle,wm_user+400,k,length(a)) ;
end;
포인터 계산이 잘못되었네요.. 그리고 메모리 누수도 생기는 군요... getmem으로 할당받은 메모리를 해제해주는 곳이 없네요. 두군데 모두다... 다 쓴뒤에는 FreeMem을 이용해서 메모리 해제해주세요...
move( (@pp.wparam)^ ,a,pp.LParam ) ;
=============>
move( PChar(pp.wparam)^ , a^, pp.LParam ) ;
^^ 항상 즐코하세요...