[firebase-br] UDF - Linux Para o Marlon David
marcelo
marcelo em inovacao.inf.br
Qui Jul 13 15:41:23 -03 2006
Caro Marlon, primeiramente obrigado.
Usei a sua sugestão, mas infelizmente não funcionou. Fiz um outro teste na
UDF para que o resultado fosse numerico de acordo com o dado recebido.
O que conclui é que a string não esta chegando corretamente. Pois fazendo um
teste na UDF se o dado enviado fosse = "X" eu retornaria 0 caso contrário
retornaria 1, sempre retornou 1 ou seja o problema é na chegada dos dados.
Você já fez alguma UDF com string que funcionasse em Linux compilada com
o Kylix ? Se sim pode me mandar um exemplo. ? Existe alguma configuração
especial no FB para este tipo de UDF ?
Marcelo
----- Original Message -----
From: "marlon david de souza" <marlon em sysmo.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, July 13, 2006 11:16 AM
Subject: Re: [firebase-br] UDF - Linux
No Firebird defina os parametros string da função como sendo do tipo
"CSTRING". Já no Kylix defina como sendo do tipo "PChar" e use o parametro
"cdecl". Obs: para passar o resultado da função para a variável "result" use
o comando "StrPCopy". Exemplo: StrPCopy(result, sVar1);
Em Qui 13 Jul 2006 13:27, marcelo escreveu:
> Caros amigos da Lista.
>
> Utilizo o Firebird já a um bom tempo e desde o inicio tive necessidade de
> criar algumas rotinas proprias atraves das UDF. Fiz uma UDF própria para
> Windows ( Via Delphi ) e recompilava a mesma no Kylix para Linux. Tudo
> funcionou muito bem ate que tive a necessidade de criar uma função para
> tratar Strings. No windows funcionou mas no linux o servidor de banco
> trava
> quando faço a chamada da função.
> Detalhes : Estou utilizando o Firebird 1.5.2 ( Windows e Linux ), Delphi 7
> e Kylix 3.
>
> Exemplo de uma UDF QUE ESTA FUNCIONANDO tanto em Windows quanto em Linux.
> Declaracao :
> DECLARE EXTERNAL FUNCTION truncnum
> DOUBLE PRECISION, INTEGER
> RETURNS DOUBLE PRECISION BY VALUE
> ENTRY_POINT 'Truncate' MODULE_NAME 'Nova_UDF';
>
>
>
> Função no Delphi/Kylix
> function Truncate(var W_Nr: Double; var W_Dec: Integer): Double; cdecl;
> export; var
> W_Mult Double;
> begin
>
> W_Mult := W_Nr * 100;
>
> end;
>
> Esta função acima é somente para exemplificar, se eu fizer algo como
> SELECT TRUNCNUM(COLUNA1) FROM TABELA1, o Windows executa e o LInux também
> sem problema nenhum.
>
>
> Exemplo de uma UDF QUE ESTA FUNCIONANDO no Windows MAS NAO FUNCIONA em
> Linux.
>
> Declaracao no banco:
>
> DECLARE EXTERNAL FUNCTION CONECTA
> CSTRING(100)
> RETURNS CSTRING(100) FREE_IT
> ENTRY_POINT 'NConecta' MODULE_NAME 'Nova_UDF';
>
> Função no Delphi/Kylix :
>
> function NConecta(W_String: PChar): PChar; cdecl; export;
>
> begin
>
> Result := 'Meu retorno';
>
>
> end;
>
> Esta função acima é somente para exemplificar, se eu fizer algo como
> SELECT CONECTA(COLUNA1) FROM TABELA1, o Windows executa mas o LInux Não.
>
> Acredito que problema possa ser :
> a) Na declaracao da UDF no banco, estou utilizando CSTring mas já tentei
> enviar como CHAR e VARCHAR e também não resolveu.
> b) OU pode ser o tipo de dados que estou recebendo em minha DLL ( PChar ),
> utilizei PChar pois no Windows foi a unica maneira de funcionar.
> C) Ou parametros cdecl que é declarado na DLL ( Não sei a diferença entre
> cdecl e stdcall, por isso mantive a que vi em alguns exemplos. )
>
>
>
> Se alguém tiver alguma dica agradeceria muito.
>
> Marcelo
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.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://firebase.com.br/pesquisa
--
Sem mais,
----------------------
Marlon David de Souza
Desenvolvimento
Sysmo Informática Ltda
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.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://firebase.com.br/pesquisa
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.10.0/388 - Release Date: 13/07/2006
Mais detalhes sobre a lista de discussão lista