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

Sicnemelpor sicnemelpor em gmail.com
Qua Ago 20 10:48:24 -03 2008


No FreePascal em Linux, ele coloca automaticamente o prefixo 'lib' no  
começo do teu executável (.so) quanto você diz que é uma 'library'.

[]s
Nelson Sicuro

> 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



-- 
Usando o revolucionário cliente de correio do Opera:  
http://www.opera.com/mail/




Mais detalhes sobre a lista de discussão lista