Fórum DLL não retorna valor PCHAR muiro grande #364584

03/10/2008

0

Pessoal, estou com um problema que não consigo encontrar a causa, quanto menos uma solução.

Desenvolvi uma DLL com uma função exportada que recebe um valor do tipo PCHAR como parametro, faz um processamento e retorna um outro valor PCHAR como resposta.

A declaração da função está assim:
function ProcessaDados(Entrada : Pchar) : Pchar; stdcall;

Exportei da seguinte maneira:
exports ProcessaDados name ´DLLProcessaDados´;

O problema é que quando o retorno da DLL é relativamente pequeno, ele retorna normal para o programa, que processa e da continuidade sem problema nenhum.
Mas quando esse retorno é muito grande, a DLL simplesmente não retorna nada para o programa que chama, ou melhor, o programa não recebe nada, porque a DLL retorna tudo normal.

Debuguei a DLL ate a ultima linha de código, e ela retornou tudo sem problemas. No momento que esse valor é passado para o programa, que ele se perde. Alguem sabe o que pode estar acontecendo e como contorná-lo??

Estou usando PCHAR exatamente pq as DLLs feitas em delphi que utilizam string já são um pouco problemáticas, ate pq tem que mandar junto a BORLNDMM.DLL.

Obrigado.


Prgdelphi

Prgdelphi

Responder

Posts

10/10/2008

Prgdelphi

ninguém tem uma idéia do que pode ser isso e de como contornar?
O negocio tá ficando feio agora, a dll só retorna o valor quando quer... uma hora retorna, outra hora não... e não é problema com as funções internas da DLL, pq eu ja joguei todas elas pra um executavel e testei infinitas vezes e sempre foi OK.

Como resolver este problema? Quando crio uma dll no delphi ele vem comentado que se eu usar PCHAR, não terei problema com memória, mas pelo jeito não é bem assim.

Alguém sabe se no delphi 2009 esse problema com DLL´s foi corrigido?


Responder

Gostei + 0

05/12/2008

Clouzada

Veja a solução em:
http://scriptbrasil.com.br/forum/index.php?showtopic=81053


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar