[ MarkoBalkan @ 21.10.2009. 21:06 ] @
radim po ovom primjeru
http://www.firebirdsql.org/index.php?op=useful&id=deatz_udf

koristim eclipse za win i gcc kompajler.


kreirao novi projekt, shared library dodao c file.

Code:

int modulo(int *, int *);

int modulo(a, b)
     int *a;
     int *b;
{
  if (*b == 0)
    return -1; // return something suitably stupid.
  else
    return *a % *b;
}



kompajlirao i dobio dll.

odradio sve ovo, uredno kreirao UDF.
In ISQL

declare external function f_Modulo
integer, integer
returns
integer by value
entry_point 'modulo' module_name 'mojlib';

commit;

kad probam izvršiti ovaj select
select f_Modulo(3, 2) from rdb$database;

dobijem gršku

Invalid token.
Invalid request BLR at offset 60.
Function F_MODULO is not defined.
Module name or entrypoint could not be found.
[ savkic @ 22.10.2009. 01:19 ] @

> int modulo(int *, int *);

> declare external function f_Modulo
> integer, integer
> returns
> integer by value
> entry_point 'modulo' module_name 'mojlib';

Pogrešno si deklarisao UDF, argumenti funkcije su pointeri na integer ne integer.

> Function F_MODULO is not defined.
> Module name or entrypoint could not be found

UDF dll moraš staviti u UDF dir FB instalacije.
[ MarkoBalkan @ 22.10.2009. 20:50 ] @
windowsi su 64 bitni (xp)

firebird je 64 bitna 2.5 beta2
a kompajler gcc (mingw)

e sad ne znam dal podržava 64 bitne sustave i dali to ima veze?
[ savkic @ 23.10.2009. 11:11 ] @
Za 64bitni server nisam siguran ali je vrlo moguće da dll takođe mora biti 64bitni. Takođe proveri da li imaš tačan naziv funkcije (case sensitive je), pogledaj dll u DepedencyWalkeru.