Bonjour,

Nous avons installé un nouveau serveur de DB Firebird sur un OS 64Bit. La recommandation de Firebird est d'installer la version 64Bit du serveur de DB. Ce que nous avons fait. Lors de nos tests, nous avons vu qu'une fonction UDF ne fonctionnait plus et générait une erreur :

Invalid request BLR at offset 8. Function SUPPRCARSPEC is not defined. Module name or entrypoint could not be found.
Après des recherches sur Google, j'ai vu que cela pouvait provenir du fait que nous avions compiler la dll pour créer l'UDF en 32Bit (en son temps) et que nous étions en 64Bit.

Par chance, j'ai retrouvé les sources du développeur qui avait fait cela. J'ai ajouté l'environnement 64Bit et j'ai compilé la dll. Après l'avoir placé dans le dossier UDF, cela ne fonctionnait toujours pas.
J'ai vu qu'il faisait appel également dans le code Delphi à une autre dll : ib_util.dll. J'ai supposé que c'était également une version 32Bit et que j'avais besoin de la version 64Bit.
J'ai trouvé cette dll sur notre nouveau serveur et je l'ai ajoutée au projet.
J'ai compilé le tout et j'ai replacé la DLL dans le dossier UDF.

A présent, plus de message d'erreur mais la fonction qui est dans la dll ne semble plus rien renvoyée. En effet, elle doit retirer des caractères spéciaux pour ensuite aller peupler un autre champ.

Voici le code du projet :

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
19
20
21
22
23
24
25
26
27
28
29
library supprCarSpec;
 
uses
  SysUtils,
  Classes,
  utilStrU in '.\utilStrU.pas';
 
 
{$R *.res}
 
function ib_util_malloc(l: integer): pointer; cdecl; external '.\ib_util.dll';
 
function SupprCarSpecUDF(Texte: PChar): PChar; cdecl; export;
begin
  try
//    Result := PChar(UpperCase(GarderLettre(SupprimerAccent(Texte))));
    Result := ib_util_malloc(length( PChar(UpperCase(GarderLettre(SupprimerAccent(Texte)))) )+1);
    StrPCopy(Result, PChar(UpperCase(GarderLettre(SupprimerAccent(Texte)))));
 
  except
    Result := Texte;
  end;
end;
 
exports
  SupprCarSpecUDF;
 
begin
end.
J'ai également essayé de recréer une UDF mais le comportement est identique.

J'avoue ne plus trop savoir que faire pour debugger cela. Si vous avez des pistes ou autres, je suis preneur

Merci d'avance pour votre aide.

Version Delphi : Rio
Version Firebird : 2.5.9 64Bit