[firebase-br] Nem o Google sabe: UDF com freepascal

Paulo paulo em manfra.com.br
Qua Ago 20 09:46:09 -03 2008


Obrigado pelas respostas, Fábio e Daniel.

Bom, primeiramente, estava comento bola: o arquivo da udf tem que 
começar "lib", senão não rola. Feito isto, começei a ter um outro erro:

Invalid token.
Invalid request BLR at offset 70.
Function SEM_ACENTO is not defined.
Module name or entrypoint could not be found.

Aqui está a declaração da udf:

DECLARE EXTERNAL FUNCTION SEM_ACENTO
  CSTRING(3000) CHARACTER SET NONE
RETURNS CSTRING(80) CHARACTER SET NONE FREE_IT
ENTRY_POINT 'tira_acento' MODULE_NAME 'udfs';


Este é a dpr que estou querendo converter para freepascal (já tentei 
compilar com -Mdelphi e -Mobjfpc):

library udfs;

uses
   Interbase in 'Interbase.pas',
   ib_util in 'ib_util.pas';

exports
   valor_atualizado,
   tira_acento,
   valor_nulo,
   existe_dados,
   existe_dados2,
   meio,
   retiranum,
   distancia;

begin
end.


Em Interbase.pas há a definição e a implementação da função, dessa forma:

function tira_acento(str1: pchar): pchar; stdcall;

Já tentei com stdcall e com cdecl, como vocês disseram, mas o resultado 
foi o mesmo erro que reportei acima. O que quer dizer este "Invalid 
request BLR at offset 70."?






Tecnobyte Informática escreveu em 19/08/2008 18:17:
> Uma certa vez eu escrevi UDF e compilei com FreePascal. Salvo engano você 
> deve usar a convenção de chamada stdcall se for Delphi e cdecl se for 
> FreePascal. Não sei por que, mas stdcall com FreePascal dá problema com 
> UDFs. Na prática Delphi e Free Pascal devem tratar de forma diferentes as 
> convenções de chamadas (embora não deveriam!).
>
> As convenções de chamada stdcall e cdecl são semelhantes, mas não idênticas.
>
> Atenciosamente.
>
> Daniel P. Guimarães
> Tecnobyte Informática
> www.tecnobyte.com.br
>
> ----- Original Message ----- 
> From: "Paulo" <paulo em manfra.com.br>
> To: "'FireBase'" <lista em firebase.com.br>
> Sent: Tuesday, August 19, 2008 4:38 PM
> Subject: [firebase-br] Nem o Google sabe: UDF com freepascal
>
>
> Estou tentando migrar um Interbase 6.0 rodando em Windows 2000 para um
> Firebird 1.5.3 no Debian (mais pra frente vamos para o 2.x.x). Procurei
> na internet sobre a compilação de udfs com o freepascal e só o que
> encontrei é: não funciona! A udf compila direitinho, mas ao ser chamada,
> o firebird retorna o seguinte erro:
> Unsuccessful execution caused by system error that does not preclude
> successful execution of subsequent statements.
> Subsystem name.
>
> Se eu bagunçar o nome da função ou o noma da so, o erro é de entry point
> ou module name não encontrado. Normal. O problema é quando ele acha!
>
> Bom, algum de vocês sabe de alguma forma de compilar udfs com o freepascal?
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>   





Mais detalhes sobre a lista de discussão lista