我試圖用C++ Builder 2010爲Firebird 2.5創建一個簡單的用戶定義函數(UDF),但是我沒有設法讓它在Firebird中工作。用C++ builder 2010爲firebird 2.5創建用戶定義函數
- 創建與C++ Builder的2010
默認設置一個DLL項目中添加一個單位與我的例子UDF包括 「ibase.h」 和 「ib_util.h」:
extern "C" __declspec(dllexport) int __stdcall MYFUNC (int i) { int result = 2 * i; return result; }
與
01號樓的DLLFBUDFMBD.dll
路徑C:\Program Files (x86)\Firebird\Firebird_2_5\UDF
註冊通過IBExpert我的UDF的示例數據庫
DECLARE EXTERNAL FUNCTION F_MYFUNC INTEGER RETURNS INTEGER ENTRY_POINT 'MYFUNC' MODULE_NAME 'FBUDFMBD';
調用UDF與
select F_MYFUNC(3) from RDB$DATABASE;
導致錯誤信息
Invalid token. invalid request BLR at offset 36. function F_MYFUNC is not defined. module name or entrypoint could not be found.
與工具GExperts - 體育信息我可以看到我的UDF作爲DLL的出口MYFUNC
序號$1
和入口點$1538
。
我在做什麼錯,Firebird無法正確註冊我的DLL和它的UDF?
有沒有什麼在我的DLL項目中改變有關默認編譯器選項?
以我的經驗Firebird UDF問題 - 通常 - 在這裏沒有得到很多答案;您也可以考慮在Firebird支持郵件列表上詢問您的問題。 –
我不是100%確定,但我相信你需要刪除'extern「C」__declspec(dllexport)',在https://github.com/FirebirdSQL/firebird/blob/8905e15435116bfac3abb30ae476d4812d1fe04b/src中尋找一個例子/extlib/ib_udf.cpp –