[firebase-br] UDFs, a quem interessar possa.
Carlos H. Cantu
listas em warmboot.com.br
Dom Maio 22 09:53:04 -03 2016
Aqui tem uma documentação muito boa sobre como escrever UDF's, recém
lançada: http://www.firebase.com.br/downloads.php?id=408
[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
A> Olá amigos, recentemente enviei mensagens informando problemas com
A> acesso a UDF's.
A> Inicialmente, escrevi a dll em CBuilder, e ao tentar chamá-la no
A> firebird, gerava erro, algumas vezes, derrubando o servidor.
A> Em testes que eu fiz, escrevendo a dll em Delphi, usei erroneamente o
A> stdcall, fazendo que não funcionasse.
A> Porém, minha linguagem base hoje é o C++ e o C#, deste modo, não me
A> interessava escrever as dll's em Delphi.
A> Neste período, usava o Windows 10, porém, voltei para o Windows 7 pois,
A> sinceramente, acho que o 10 ainda precisa amadurecer muito pra ficar bom ...
A> Voltei a fazer testes de acesso a udf's mas sem sucesso.
A> Inconformado, comecei a investigar mais a fundo e a seguir, cito como
A> resolvi:
A> 1 - Desabilitei o UAC (controle de usuários do windows).
A> Isso porque, quando eu estava com a UAC habilitada, ao tentar acessar a
A> UDF era gerado um erro;
A> 2 - A passagem de parâmetros para a função simples de soma que eu estava
A> escrevendo em C++ tem que ser feita através de PONTEIRO.
A> Vejam um exemplo comparando as funções em Pascal e em C++
A> ******************************************************************************
A> //Declaração e definição da função em C++
A> //Implementado em VStudio 2015 e CBuilder
A> extern "C" __declspec(dllexport) int soma(int *a, int *b)
A> {
A> return *a + *b;
A> }
A> //Declaração da função em Pascal
A> function soma(a: Integer; b: Integer): integer; cdecl; export;
A> //Implementação da função em Pascal abaixo
A> function soma(a: Integer; b: Integer): integer;
A> begin
A> result:= a + b;
A> end;
A> exports
A> soma;
A> *****************************************************************************
A> O grande problema, quando desenvolvi a função em c++ é que eu estava
A> passando os parâmetros como valor e não como ponteiro. Pensei que, se
A> tivesse que passar apenas inteiros simples, poderia passar como valor.
A> Porém, se você passar como valor, receberá resultados errados.
A> Mesmo passando simples valores do tipo int (nem estou citando strings)
A> temos que passar os parâmetros através de PONTEIRO.
A> Observem que, em C/C++ não é necessário usar "cdecl", como em Pascal.
A> Abraços.
A> ______________________________________________
A> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
A> Para saber como gerenciar/excluir seu cadastro na lista, use:
A> http://www.firebase.com.br/fb/artigo.php?id=1107
A> Para consultar mensagens antigas:
A> http://www.firebase.com.br/pesquisa_lista.html
Mais detalhes sobre a lista de discussão lista