我有FireBird 3.0 x64 写了一个简单的dll,扔到c Firebird UDF目录(c:\Program Files\Software development\Firebird_3_0\UDF)
library my;
uses
SysUtils,
Classes;
{$R *.res}
function mm: integer; cdecl; export;
begin
result := 1+1;
end;
exports
mm;
begin
isMultiThread:=True;
end.
在 Delphi 上调试 - 它可以
在数据库中声明它:
DECLARE EXTERNAL FUNCTION "mm"
RETURNS INTEGER BY VALUE
ENTRY_POINT 'mm' MODULE_NAME 'my';
在 IBExpert 中(我正在尝试将函数的结果写入该字段):
update SERVICES_TABLE
set field6 = "mm"()
where DESCRIPTION = 'user manual'
错误:
无法格式化消息 13:896 -- 消息系统代码 -4。偏移量 39 处的无效请求 BLR。未定义函数 mm。找不到模块名称或入口点。
已经尝试将 udf 移动到另一个目录,“ firebird.conf ”
UdfAccess = 限制 D:\MyUDF
无济于事
一切都是从第三方 dll 开始的,但错误相同
可能是什么?
通过试用方法:我将此库转移到具有 x86 架构的 PC 上,一切正常。
但是我有一个x64上的数据库
怎么办?
为了将 UDF 与 Firebird x64 一起使用,它必须针对 Windows 64 位进行编译。Delphi 从 XE2 开始就有这个特性。您还可以使用免费的 Lazarus 克隆