更新TMS组件后运行报错:无法找到Core.bpl中的入口点
问题解答
一、错误信息末尾$qqr20System@UnicodeStringt1的含义
这是Delphi编译器生成的名称修饰字符串,相当于给方法分配的唯一“标识ID”,用来区分同名但参数不同的重载方法:
$qq:Delphi托管方法的固定前缀r:表示方法的参数为引用传递(比如带const/var修饰符)20System@UnicodeString:参数类型是System.UnicodeString,20是该类型全称的字符长度t1:说明这个方法包含1个参数
简单来说,这个后缀明确了程序要寻找的是带1个UnicodeString引用参数的DoDevToolsMethodCompleted方法入口。
二、入口点缺失问题的解决方法
1. 彻底清理旧编译产物
即使确认无旧版VCL.TMSFNCWebBrowser.dcu,仍需清理所有可能的残留:
- 删除项目目录下所有BPL、DCU、OBJ、RES文件
- 清空RAD Studio默认缓存目录(
Documents\Embarcadero\Studio\22.0\Cache)下的所有内容 - 确保Core.bpl的输出目录完全清空,再重新启动编译流程
2. 显式导出目标方法到Core.bpl
虽然protected virtual方法理论上会被自动导出,但BPL封装场景下编译器可能优化掉未被直接调用的导出项。可在Core.bpl的项目代码中手动添加导出声明:
exports @TTMSFNCCustomWebBrowser.DoDevToolsMethodCompleted name '@Vcl@Tmsfncwebbrowser@TTMSFNCCustomWebBrowser@DoDevToolsMethodCompleted$qqr20System@UnicodeStringt1';
注意必须完全照搬错误信息中的入口点名称,字符不能有偏差。
3. 重新编译TMS组件包
更新TMS组件后,先确保组件包本身是基于当前RAD Studio版本编译的:
- 打开RAD Studio,进入
Component > Install Packages,找到TMS FNC相关组件包(如TMSFNCWebBrowserPkg),右键选择Recompile - 待TMS组件包编译完成后,按顺序重新编译:Core.bpl → 主EXE,确保整个依赖链使用最新编译产物
4. 核对方法签名一致性
重写方法后仍报错,大概率是签名与新版TMS代码不匹配:
- 直接查看TMS的
VCL.TMSFNCWebBrowser.pas源码,确认DoDevToolsMethodCompleted的准确签名(包括参数类型、修饰符等) - 将自己重写的方法修改为与源码完全一致的签名,避免因参数差异导致入口点标识不匹配
5. 统一运行时库版本
确保Core.bpl与主EXE使用的运行时库(RTL)版本一致,均为RAD Studio 11.1 Update 1对应的版本,项目选项中Linking > Runtime Library的配置要保持统一,避免版本不兼容引发的入口点问题
内容的提问来源于stack exchange,提问作者James L.
相关产品推荐
相关产品推荐

