[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