Ich habe versucht, eine einfache benutzerdefinierte Funktion (UDF) für Firebird 2.5 mit C++ Builder 2010 zu erstellen, aber ich bekomme es nicht in Firebird arbeiten.Erstellen einer benutzerdefinierten Funktion für Firebird 2.5 mit C++ Builder 2010
- ein DLL-Projekt mit Standardeinstellung erstellen in C++ Builder 2010
eine Einheit mit meinem Beispiel UDF einschließlich "ibase.h" und "ib_util.h" Hinzufügen:
extern "C" __declspec(dllexport) int __stdcall MYFUNC (int i) { int result = 2 * i; return result; }
Erstellen des DLL
FBUDFMBD.dll
in PfadC:\Program Files (x86)\Firebird\Firebird_2_5\UDF
Registrierung meine UDF über IBExpert in einer Probe db mit
DECLARE EXTERNAL FUNCTION F_MYFUNC INTEGER RETURNS INTEGER ENTRY_POINT 'MYFUNC' MODULE_NAME 'FBUDFMBD';
Aufrufen der UDF mit
select F_MYFUNC(3) from RDB$DATABASE;
Ergebnisse in Fehlermeldung
Invalid token. invalid request BLR at offset 36. function F_MYFUNC is not defined. module name or entrypoint could not be found.
Mit dem Werkzeug GExperts - PE Informationen ich meine UDF als DLL-Export sehen MYFUNC
Ordnungszahl $1
und Einstiegspunkt $1538
.
Was ich falsch mache, kann Firebird meine DLL und seine UDF nicht richtig registrieren?
Gibt es etwas in meinem DLL-Projekt zu ändern, in Bezug auf die Standard-Compiler-Optionen?
Meiner Erfahrung nach bekommt die Firebird UDF-Frage - normalerweise - hier nicht viele Antworten; Vielleicht möchten Sie Ihre Frage auch auf die Firebird-Support-Mailingliste stellen. –
Ich bin nicht 100% sicher, aber ich glaube, Sie müssen entfernen Sie die 'extern" C "__declspec (dllexport)', suchen Sie nach einem Beispiel unter https://github.com/FirebirdSQL/firebird/blob/8905e15435116bfac3abb30ae476d4812d1fe04b/src /extlib/ib_udf.cpp –