Thanks Sean. The UDF/DLL is in located in the path described in the firebird.conf: UdfAccess = Restrict D:\Apps\Firebird\Firebird_2_5\UDF;
Yes, "myDLL.dll' is 32-bit, However my FB installation is 64-bit. I did compile the dll to the 64-bit target and copied into the UDF folder. The problem persists. Any other clues? Thanks. 2013/10/2 Leyne, Sean <[email protected]> > ** > > > ** ** > > Are you sure that the UDF/DLL is in the %Firebird%\UDF folder?**** > > ** ** > > Are you trying to run a 32bit UDF with a 64 bit version of Firebird?**** > > ** ** > > ** ** > > Sean**** > > ** ** > > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *firebirddev firebirddev > *Sent:* Wednesday, October 02, 2013 3:13 PM > *To:* [email protected] > *Subject:* [firebird-support] UDF and Delphi XE3 Blues**** > > ** ** > > > > > **** > > Hello.**** > > ** ** > > If this is not the right group, kindly direct me to the right group.**** > > ** ** > > I have created a UDF and I am getting stuck at the following error:**** > > ** ** > > Preparing query: select F_MODULO(3, 2) from rdb$database**** > > ** ** > > Error: *** IBPP::SQLException ******* > > Context: Statement::Prepare( select F_MODULO(3, 2) from rdb$database**** > > )**** > > Message: isc_dsql_prepare failed**** > > ** ** > > SQL Message : -104**** > > Invalid token**** > > ** ** > > Engine Code : 335544343**** > > Engine Message :**** > > invalid request BLR at offset 60**** > > function F_MODULO is not defined**** > > module name or entrypoint could not be found**** > > ** ** > > ** ** > > Total execution time: 0.003s**** > > ** ** > > ** ** > > Here are the steps I have performed:**** > > ** ** > > ===============**** > > Delphi XE3 code**** > > ================**** > > ** ** > > library myUDF;**** > > ** ** > > { Important note about DLL memory management: ShareMem must be the**** > > first unit in your library's USES clause AND your project's (select**** > > Project-View Source) USES clause if your DLL exports any procedures or** > ** > > functions that pass strings as parameters or function results. This**** > > applies to all strings passed to and from your DLL--even those that**** > > are nested in records and classes. ShareMem is the interface unit to**** > > the BORLNDMM.DLL shared memory manager, which must be deployed along**** > > with your DLL. To avoid using BORLNDMM.DLL, pass string information**** > > using PChar or ShortString parameters. }**** > > ** ** > > uses**** > > System.SysUtils,**** > > System.Classes;**** > > ** ** > > //{$R *.res}**** > > ** ** > > function Modulo(var i, j: Integer): Integer; cdecl;**** > > begin**** > > if (j = 0) then**** > > result := -1 // just check the boundary condition, and**** > > // return a reasonably uninteresting answer.**** > > else**** > > result := i mod j;**** > > end;**** > > ** ** > > exports**** > > Modulo;**** > > ** ** > > begin**** > > end.**** > > ** ** > > ==============**** > > FB 2.5 declaration**** > > ==============**** > > ** ** > > DECLARE EXTERNAL FUNCTION F_MODULO**** > > Integer, Integer**** > > RETURNS Integer BY VALUE **** > > ENTRY_POINT 'Modulo'**** > > MODULE_NAME 'myDLL';**** > > ** ** > > ==============================**** > > Calling the function F_MODULO from FB:**** > > ===============================**** > > ** ** > > select F_MODULO(3, 2) from rdb$database**** > > ** ** > > ====================**** > > My firebird.conf looks like:**** > > =====================**** > > ** ** > > UdfAccess = Restrict D:\Apps\Firebird\Firebird_2_5\UDF;**** > > ** ** > > Please let me know how I can resolve the problem.**** > > ** ** > > Thanks.**** > > > > > **** > > **** > > >
