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

如何使自定义VCL组件包兼容64位并正常显示于组件面板?

解决VCL组件64位应用面板灰色不可用问题

排查与修复步骤

  • 确认64位设计包安装状态
    打开Delphi的Component > Install Packages,切换到Win64平台标签,检查你的组件包是否在已安装列表中。如果未列出,手动点击Add,选择编译生成的64位BPL文件(通常在项目的Win64\Debug或Win64\Release目录下)。注意32位和64位设计包是独立管理的,32位安装成功不代表64位自动生效。

  • 检查组件注册代码的平台兼容性
    打开组件单元(如HsGauge.pas),找到Register过程,确保没有通过{$IFDEF WIN32}这类条件编译指令屏蔽64位下的注册逻辑。例如要避免以下错误写法:

    {$IFDEF WIN32}
    procedure Register;
    begin
      RegisterComponents('MyComponents', [THsGauge]);
    end;
    {$ENDIF}
    

    需移除该条件,或补充{$IFDEF WIN64}分支保证64位环境下组件能正常注册。

  • 验证依赖包的64位版本
    你的组件包依赖了Jcl等第三方库,必须确保这些依赖包的64位版本已安装,且与你的组件包编译版本一致:

    1. 打开Tools > Options > Language > Delphi > Library,切换到Win64平台;
    2. 检查Library Path和Browsing Path是否包含Jcl等依赖包的64位编译目录;
    3. 若依赖包无64位版本,需先编译其64位BPL并安装到IDE。
  • 统一编译选项的平台配置
    打开组件包的Project Options,切换到Win64平台:

    • 确认Build Configuration与你要安装的BPL版本(Debug/Release)匹配;
    • 检查Delphi Compiler > Compiling选项,确保未启用仅32位专属特性;
    • 确认Package > Output directory和Unit output directory指向独立的64位目录,避免与32位编译文件混放。
  • 排查代码中的隐性32位依赖
    即使代码无明显32位依赖,也要检查以下潜在问题:

    • 避免用Integer替代NativeInt/NativeUInt:64位环境下Integer为32位,指针相关操作需使用原生宽度类型;
    • 检查指针转换、内存操作逻辑:确保64位地址宽度被正确处理,例如避免错误的指针类型转换;
    • 确认未调用仅32位的API或第三方DLL:这类依赖会导致64位包无法正常加载。
  • 重新编译安装64位包

    1. 卸载已有的32位和64位组件包;
    2. 清理项目的Win64编译目录,删除*.dcp、*.bpl、*.obj等文件;
    3. 切换到Win64平台,重新编译组件包,点击Install完成安装;
    4. 重启Delphi后,打开64位项目验证组件面板状态。

用户提供的BPL源码

package ......;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION '......'}
{$IMPLICITBUILD OFF}

requires
  rtl,
  vcl,
  VclSmp,
  vclx,
  adortl,
  dbrtl,
  vclactnband,
  xmlrtl,
  vcldb,
  Jcl,
  vclie;

contains
  HsGauge in 'HsGauge.pas',
  .......

end.

内容的提问来源于stack exchange,提问作者Daniel Marschall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:11:47