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

BPL包间全局变量(单例)共享崩溃问题排查

Delphi BPL包间共享泛型单例类变量崩溃问题及资料需求

包层级结构

BasicFunc.dpk      (定义单例类及其类构造函数)
  LibVclCode1_R.dpk  (初始化单例)
    LibVclCode1_D.dpk  (访问单例)
      LibVclCode2_R.dpk 
        LibVclCode2_D.dpk  (访问单例,包含IDE专家)

问题详情

  • 泛型单例类定义:TMySingleton<T: IInterface> = class
  • 类变量:Lock: System.SysUtils.IReadWriteSync,在类构造函数中初始化为TMultiReadExclusiveWriteSynchronizer
  • 异常表现:安装包到IDE时能触发类构造函数的提示输出,但打开包含访问单例组件的窗体时,因Lock变量为nil导致崩溃
  • 环境约束:未启用「Link with runtime packages」选项;单例锁机制本身用于解决初始化阶段多线程访问冲突,该逻辑已修复,当前需解决包环境下的运行问题
  • 排查方向:官方文档关于BPL包间共享全局变量的信息极少,{$G+}指令文档暗示普通全局变量可共享,怀疑问题与线程模型或BPL地址空间隔离有关

相关资料资源方向

  • Delphi官方文档中包(Package)内存模型相关章节:重点关注包间全局变量、类变量的存储机制,尤其是泛型类在不同包中实例化时的变量共享规则
  • Delphi编译器指令{$G+}的详细说明:明确该指令对泛型类变量、接口类型变量的作用范围与限制
  • Delphi IDE插件开发指南:针对包含IDE专家的BPL包,了解其初始化顺序、线程模型与普通应用包的差异
  • Delphi社区技术讨论内容:搜索「BPL singleton class variable nil」「Delphi package class constructor execution scope」等关键词,查找同类问题的解决方案
  • Delphi核心内存管理相关书籍:重点学习DLL/BPL的内存隔离机制、跨模块接口共享的注意事项

内容的提问来源于stack exchange,提问作者Error - CPU Not Foud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:47:43