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

Paulo paulo em manfra.com.br
Qua Ago 20 10:32:03 -03 2008


Estranho mesmo, até porque as funções em ib_udf funcionam. Porém, se eu 
tirar o lib da minha udf, o erro é o mesmo de eu colocar abc123 no 
MODULE_NAME da declaração dela.

Tecnobyte Informática escreveu em 20/08/2008 09:58:
> Quando fiz UDF para Linux, não precisei deixar o prefixo "lib" no nome do 
> arquivo. Afinal, é estranho isto por que o nome do arquivo nada tem a ver 
> com seu conteúdo.
>
> 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: Wednesday, August 20, 2008 8:46 AM
> Subject: Re: [firebase-br] Nem o Google sabe: UDF com freepascal
>
>
> 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
>>
>>     
>
>
> ______________________________________________
> 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