You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebird 4 UDR创建报错‘Invalid entry point’求助

FireDac执行UDR函数创建脚本报“Invalid entry point”的解决方案

在Firebird 4环境中,使用isql可正常注册UDR函数,但通过Delphi 10.4的FireDac执行相同创建脚本时,会触发Invalid entry point错误,官方示例udrcpp_example.dll及自定义Delphi编写的UDR DLL均存在此问题,以下是可行的排查和解决方向:

排查方向与解决方法

1. 对齐FireDac连接参数与isql配置

FireDac默认连接属性可能与isql存在差异,需确保:

  • 连接配置中DataTypeCompatibility设置为3.0,与firebird.conf中的对应参数保持一致
  • 确认FireDac使用的协议(如TCP/IP)与isql一致,避免协议差异导致的解析问题
  • 关闭FireDac的PrepareSQL选项,防止SQL被不必要的预处理修改

2. 验证位数匹配

UDR DLL的位数必须与Firebird服务器完全匹配:

  • 确认Firebird服务器是32位还是64位,对应使用同位数的udrcpp_example.dll
  • Delphi编译自定义UDR DLL时,选择与Firebird服务器一致的平台(32/64位),且编译选项中关闭无关设置(如“生成控制台应用程序”)

3. 调整FireDac SQL执行方式

使用ExecuteDirect直接执行原始SQL语句,避免参数化或预解析:

FDConnection1.ExecSQL('create function sum_args (n1 integer, n2 integer, n3 integer) returns integer external name ''udrcpp_example!sum_args'' engine udr;');

注意SQL字符串中引号的转义处理,确保脚本完整传递给Firebird服务器。

4. 确认连接用户权限

确保FireDac使用的连接用户拥有与isql相同的权限:

  • 具备CREATE FUNCTION系统权限
  • 因ExternalFileAccess已设为Full,需确认用户对UDR DLL所在目录有读取权限

问题背景参考配置

firebird.conf关键配置

ServerMode = Super
DefaultDbCachePages = 20K
FileSystemCacheThreshold = 2M
TempBlockSize = 2M
TempCacheLimit = 1500M
AuthServer = Legacy_Auth, Srp, Win_Sspi
AuthClient = Legacy_Auth, Srp, Win_Sspi
UserManager = Legacy_UserManager, Srp
WireCrypt = Enabled 
RemoteServicePort = 3054
DataTypeCompatibility = 3.0
LockMemSize = 15M
LockHashSlots = 30011
UdfAccess = Restrict UDF
ExternalFileAccess=Full 

plugins/udr_engine.conf配置

external_engine = UDR {
    plugin_module = UDR_engine
}

plugin_module = UDR_engine {
    filename = $(this)/udr_engine
    plugin_config = UDR_config
}

plugin_config = UDR_config {
    path = $(this)/udr
}

测试用UDR创建脚本

create function sum_args (
    n1 integer,
    n2 integer,
    n3 integer
)
returns integer
external name 'udrcpp_example!sum_args'
engine udr;

内容的提问来源于stack exchange,提问作者Michael Desboeufs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:56:20