Re: [firebase-br] Firebird 1.5.2 + Linux + minha UDF.... está caindo a conexão
Daniel / Tecnobyte
temp em tecnobyte.com.br
Seg Abr 18 18:10:50 -03 2005
Experimente alterar de:
function Trin(Source: PChar): PChar; stdcall; export;
begin
Result := Source;
StrCopy(Result,Pchar(Trim(Source)));
end;
para:
function Trin(Source: PChar): PChar; cdecl; export;
begin
Result := Source;
StrPCopy(Result, Trim(Source));
end;
As mudanças que fiz fora:
- Convenção de chamada da função: troquei stdcall por cdecl. Faz tempo que
li sobre isto num material do Firebird e se não me engano este é o padrão
recomendado para UDFs. Isto pode ser fonte de problemas. Notei também que
você usa cdecl em algumas funções e stdcall em outras. A princípio não faz
sentido misturar as duas convenções.
Segundo o help do Delphi, na convenção de chamada cdecl quem limpa a memória
alocada para passagem dos parâmetros é o processo chamador. Parece fazer
sentido que se você usar stdcall a UDF vai desalocar a memória usada nos
parâmetros, mas como você está usando o ponteiro passado pelo FB para
retornar a string, então o FB está tentando desalocar a memória também. Deve
ser esta a causa do problema.
- Troquei a função StrCopy por StrPCopy e removi o typecast para PChar da
string Source. Isto aqui foi mais para limpeza do código. Não deve fazer
grande diferença.
Atenciosamente.
Daniel P. Guimarães
Tecnobyte informática
Organize seu dia-a-dia com
Tecnobyte Agenda 2.1
Acesse: www.tecnobyte.com.br
----- Original Message -----
From: "dirceu bol" <dirceu.h em bol.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Monday, April 18, 2005 4:28 PM
Subject: Re: [firebase-br] Firebird 1.5.2 + Linux + minha UDF.... está
caindo a conexão
> Daniel....
> os fontes estão no link (ecoudf.dpr delphi6)
> http://www.dirceu.hpg.ig.com.br/index3.html
>
> agradeço a ajuda
>
> Dirceu Altair Henchen
> Guarantã do Norte - MT
> dirceu.h em bol.com.br
>
> ----- Original Message -----
> From: "Daniel / Tecnobyte" <temp em tecnobyte.com.br>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Monday, April 18, 2005 10:52 AM
> Subject: Re: [firebase-br] Firebird 1.5.2 + Linux + minha UDF.... está
> caindo a conexão
>
>
> Mas cadê o código-fonte da UDF?
>
> Atenciosamente.
>
> Daniel P. Guimarães
> Tecnobyte informática
> www.tecnobyte.com.br
>
> > Daniel... La Vai
> >
> > link para baixar a UDF (linux e windows)
> > http://www.dirceu.hpg.ig.com.br/index2.html
> >
> > CREATE TABLE "TESTE"
> > (
> > "NOME" VARCHAR(80)
> > );
> > commit;
> >
> > INSERT INTO "TESTE" ("NOME") VALUES ('LINHA 1');
> > INSERT INTO "TESTE" ("NOME") VALUES ('LINHA 2');
> > commit;
> >
> >
> > DECLARE EXTERNAL FUNCTION TRIM
> > CSTRING(40) CHARACTER SET NONE
> > RETURNS CSTRING(40) CHARACTER SET NONE
> > ENTRY_POINT 'Trin' MODULE_NAME 'ecoudf';
> > commit;
> >
> >
> >
> > windows 2000-prof/98/xp-prof + fb 1.5 ou fb 1.0 >> funciona normal
> > (firebird super server)
> > conectiva linux 10 (kernel 2.6.5-63077cl) + FB Super server
> > 1.5.2.4731-nptl.i686 >> acontece o erro.
> >
> > já executei chmod 777 * no diretorio /opt/firebird.... ajustei o
> > diretorio /temp no firebird.conf e dei acesso total (chmod 777 *).
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas:
> http://search.gmane.org/search.php?group=rebase
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas:
http://search.gmane.org/search.php?groupþbase
>
Mais detalhes sobre a lista de discussão lista