Obrigado pelas explicações, graças a elas finalmente deu certo o que eu queria 
fazer,
 
Valeu
 



To: [EMAIL PROTECTED]: [EMAIL PROTECTED]: Thu, 7 Aug 2008 08:17:14 
-0300Subject: Re: [delphi-br] Dúvidas sobre PChar




Francesco Perrotti wrote:> Pelo jeito o problema não é o uso incorreto do 
PChar, seria algo que eu > deveria saber sobre alocação de memória em dll's? 
Não posso liberar no > programa memória alocada na DLL? Se for isso como eu 
poderia resolver a > situação? A função na DLL tem que retornar uma string e 
isso vai acontecer > milhares de vezes durante o processamento, preciso liberar 
essa string.> O C tem o tipo far para ponteiros que estão em outro módulo, o 
delphi > tem algo parecido com isso? Seria esse o problema?Você não pode alocar 
memória em um executável e liberar em outro, a menos que os dois estejam usando 
exatamente o mesmo gerenciador de memória. Funcionava antes justamente por 
causa disto. Se a sua dll e o seu aplicativo são escritos com o mesmo 
compilador, você pode abrir a unit sharemem e criar uma dependência com a 
borlandmm.dll, isto resolve o seu problema e você sequer precisa trabalhar com 
pchar. Veja nos docs como o fastmm trabalha com o sharemem.Agora se você quiser 
alguma independência, seja da unit sharemem ou da borlandmm.dll para poder usar 
sua dll com aplicativos escrito por terceiros, você tem que sempre desacolar 
memória através do mesmo executável que a alocou.Para passagens de string, você 
abre um tanto de memória na aplicação, por exemplo, 256 bytes, e passar o seu 
pchar como parâmetro. Talvez você possa fazer isso aqui:varVStr: 
string;beginSetLength(VStr, 256);ChamaDll(PChar(VStr));UsaStr(VStr);end;Talvez 
você tenha problema com a identificação do tamanho da string, não sei, tem que 
testar a posição do #0 com o resultado de Length(VStr). Basta saber que ansi 
strings são totalmente compatíveis com pchar, mas a recíproca *não* é 
verdadeira.Do outro lado, a dll sabe que esse pchar aponta para 256 bytes 
previamente alocados e coloca a string lá dentro. Depois você recebe a string 
populada pela dll e libera quando quiser. Dá um trabalho a la C, mas é a forma 
de fazer isto funcionar corretamente.Joao Morais 





_________________________________________________________________
Confira vídeos com notícias do NY Times, gols direto do Lance, videocassetadas 
e muito mais no MSN Video!
http://video.msn.com/?mkt=pt-br

[As partes desta mensagem que não continham texto foram removidas]

Responder a