delphi 使VCL软件包与64位兼容

mrzz3bfm  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(258)

我注意到在一个64位应用程序中,我编写的VCL Design组件在组件调色板中是灰色的:

其他第三方VCL组件可在32位和64位模式下工作。
我的BPL可以在32位和64位模式下编译。没有只需要32位的代码。我可以做些什么来解锁组件到64位应用程序?
VCL组件的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.

我注意到,我不能安装组件时,它是在64位编译(我不知道这是否是原因):
32位:

64位:

chy5wohz

chy5wohz1#

IDE是一个win32程序,所以它只能加载win32 dll和win32 bpl,所以你不能安装win 64 bpl默认情况下-所有必须正常工作,我们开发了很多组件,所以你的代码破坏了一些东西,在现代版本的 Delphi 中,有一个特殊的属性,用于指定你的组件的目标平台的类-“ComponentPlatformsAttribute”,所以,如果你写这样东西:

[ComponentPlatformsAttribute(pidWin32 or pidWin64)]
TMyButton = class(TButton)
End;

此组件适用于Win32和Win 64平台,但不适用于(灰色)Android,IOS等。请尝试在那里找到解决方案。
P.S.如果它没有帮助-尝试创建一个简单的BPL与一个简单的示例组件,并尝试在win 64中使用它。如果它的工作-比较这个BPL的设置与您的不可行的BPL。然后将差异一个接一个地移动到示例BPL,直到它将停止工作。这样你就可以找到什么是错的。

piok6c0g

piok6c0g2#

Delphi IDE是一个32位应用程序,需要32位包才能在设计时使用组件。
你的64位应用程序需要一个64位运行时包,这就是为什么 Delphi 可以构建64位包。
如果你不在你的应用程序中使用运行时包,那么就没有必要创建一个。

相关问题