[fpc-pascal] Firebird UDF

Stephano patspiper at yahoo.com
Thu Mar 13 20:08:47 CET 2008


Codebue Fabio - P-Soft wrote:
> nothing todo...
> ok restart:
> library pudf;
> 
> {$mode objfpc}{$H+}
> 
> uses
>   Classes,
>   p_func in 'p_func.pas';
> 
> exports
>   pround name 'p_round';
> 
> {$R pudf.res}
> 
> begin
> 
> //  DECLARE EXTERNAL FUNCTION pround
> //   DOUBLE PRECISION, INTEGER
> //   RETURNS DOUBLE PRECISION BY VALUE
> //  ENTRY_POINT 'pudf_pround'  MODULE_NAME 'pudf';
> 
> end.                        
> 
> and
> 
> unit p_func;
> 
> {$mode objfpc}{$H+}
> 
> interface
>   function p_round(var valore: double; ndec: integer): double; cdecl;
> 
> implementation
> 
> uses
>   Classes, SysUtils;
> 
> function p_round(var valore: double; ndec: integer): double; cdecl;
> var
>   i: integer;
>   risultato: double;
>   ndivisore: integer;
> begin
> 
>   risultato:= valore;
>   ndivisore:= 1;
>   for i:= 1 to ndec do
>   begin
>     risultato:= risultato*10;
>     ndivisore:= ndivisore*10;
>   end;
> 
>   result:= round(risultato)/ndivisore;
> end;
> end.       
> 
> someone can compile and install?
> 
> I can... but when I try to execute
> 
> select round(123.1233, 2) as nrounded from rdb$database
> 
> always some error!!!

You are exporting now the function as p_round. So I guess your entry 
point should be pudf_p_round.

Furthermore, your sql includes round and not pround!

What is the error message you got?



More information about the fpc-pascal mailing list