Bonjour,
Je rencontre un problème d'utilisation d'une UDF:
Je suis sous Fb2.5 64.
Je teste sous Ibexpert.
Ma Dll complilée en 64 bits est enregistrée dans le répertoire UDF de firebird.
La déclaration est la suivante, extrait de IbExpert:
Le code de ma dll est très simple, juste de quoi tester l'appel:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 DECLARE EXTERNAL FUNCTION TESTUDF VARCHAR(255) CHARACTER SET NONE NULL RETURNS INTEGER BY VALUE ENTRY_POINT 'LogFb' MODULE_NAME 'TraceFb.dll';
Pour la tester j'ai une procedure stockée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 library TraceFb; uses System.SysUtils, System.Classes; {$R *.res} function LogFb(value: pchar): integer;cdecl; begin result:= -1; try result:= 0; except end; end; exports LogFb; begin end.
Quand je tente de compliler ma PS j'ai le message suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SET TERM ^ ;CREATE OR ALTER PROCEDURE PSCALLUDF returns ( result integer) as begin select testudf(fdTest) from tbltest into :result; end^ SET TERM ; ^
Manifestement soit FB ne trouve pas la dll dans le dossier UDF soit c'est la fonction LogFb qui n'est pas trouvée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Invalid token. invalid request BLR at offset 48. function TESTUDF is not defined. module name or entrypoint could not be found. Error while parsing procedure PSCALLUDF's BLR.
Mais pourquoi ?
En sachant que j'ai regardé UDFaccess, que je l'ai changé la conf avec une entrée explicite:
UdfAccess = 'C:\Program Files\Firebird\Firebird_2_5\UDF\'
que j'ai aussi essayé en compilant la DLL en 32 bits.
J'ai rebooté à chaque fois mon poste.
Bref je sais plus où regarder !
J'ai sûrement fait une erreur ou un oublis qq. part, mais là je ne vois pas.
merci pour votre aide.
Partager