[firebase-br] Usando UDFs, questão.

Gladiston Santana gladiston em vidy.com.br
Qui Out 2 15:06:49 -03 2014


Eu estou estudando a criação de UDFs, mas tem algo que não consigo entender.

Exemplos encontrados na internet, como este:
http://www.firebirdsql.org/en/writing-udfs-in-delphi-for-interbase-firebird/

as funcoes em Delphi são exportadas como stdcall :
function Teste(sVar:PAnsiChar; iVar:Integer):PAnsiChar; stdcall ;

Até aí beleza, porém não funciona, executando-a dá um crash e fecha a
conexão e em debug é possivel notar que o processo ocorreu bem, então devo
deduzir que o problema foi o retorno.

Daí eu faço o seguinte, troco-as por cdecl e mudo as referencias de inteiro
para ^Integer (ponteiros por referencia):
type PInteger = ^Integer;
function Teste(sVar:PAnsiChar; iVar:PInteger):PAnsiChar; cdecl;

e aí funciona, tendo que lidar o restante da procedure com ponteiros em
iVar, mas funciona.

Eu só gostaria de saber, o porque disso, já que os exemplos de udf para
firebird são na maioria stdcall padrão da Api do Windows.

Alguém sabe a razão disso?

Não consigo fazer um helloword com parametros de entrada e saida usando
stdcall com inteiros, só cdecl e lidando com ponteiros. Isso não é um
obstaculo, apenas complica um pouco a vida, mas gostaria de saber o porque
disso, já que exemplos usando stdcall são tão comuns.

[]´s a todos.



Mais detalhes sobre a lista de discussão lista