Francesco Perrotti wrote:
> Agradeço ao Rubens e ao João Morais as explicações, realmente foram 
> esclarecedoras.
> As vezes fico em dúvida sobre o que o Delphi faz automaticamente e o que não 
> faz.
> No caso de C é mais simples, ele nunca faz nada, a gente tem que fazer tudo, 
> aí não tem dúvida, só mais trabalho :-).

Se o tipo for string (ansi string), o Delphi faz tudo. Se não for, o 
Delphi faz nada.

> Fiz um programa de teste e aparentemente funcionou. Usei a seguinte função, 
> que não é 
> exatamente o que vou usar na DLL, mas serve como teste:
>  
> function GetStrTime: pchar;var St: string;begin  St := 'Hora: ' + 
> TimeToStr(Now);  GetMem(Result, Length(St)+1);  StrCopy(Result, 
> PChar(St));end;
> E pra testar, coloquei um memo no form e o seguinte código em um botão:
>  
> procedure TForm1.Button1Click(Sender: TObject);var i: integer;    p: 
> PChar;begin  for i := 1 to 1000 do  begin    p := GetStrTime;    
> Memo1.Lines.Add(String(P));    FreeMem(p);  end;end;
>  
> Funcionou a contento, sem dar nenhuma exceção, então acho que o problema tá 
> resolvido.

Instala o FastMM no seu projeto e liga FullDebugMode. Ele é bem melhor 
que o gerenciador de memória do Delphi (até o 2005) pra pegar corrupção 
de memória, sem falar que vai te avisar de vazamentos.

Joao Morais

Responder a