[fpc-pascal] Firebird UDF

Stephano patspiper at yahoo.com
Sat Mar 15 15:05:39 CET 2008


>> 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!!!

- Entry point should be p_round only in this case

- Adding also 'export' in the function declaration should help:

function p_round(var valore: double; ndec: integer): double; cdecl; export;

- The following needs to be corrected as well:
exports p_round name 'p_round';
_________^



More information about the fpc-pascal mailing list