Delphi,如何在两个不同的包中安装具有相同名称的组件

Delphi,如何在两个不同的包中安装具有相同名称的组件,delphi,package,components,vcl,bpl,Delphi,Package,Components,Vcl,Bpl,我需要安装两个不同的组件包,第一个使用BDE连接,第二个使用FireDAC连接,它们都包含一个名为“TKsAnalExpr”的组件,该组件包含在一个名为“UAnalExpr”的单元中 我正确安装了其中一个软件包,但当我尝试安装第二个软件包时,Delphi显示以下错误消息: 登记程序,Kactus@UAnalExpr.Register在包C:\Entorno Delphi XE3\BPL\Kactus.BPL中引发了异常类EFilerError:组件TKsAnalExpr无法由包Kactus.BP

我需要安装两个不同的组件包,第一个使用BDE连接,第二个使用FireDAC连接,它们都包含一个名为“TKsAnalExpr”的组件,该组件包含在一个名为“UAnalExpr”的单元中

我正确安装了其中一个软件包,但当我尝试安装第二个软件包时,Delphi显示以下错误消息:

登记程序,Kactus@UAnalExpr.Register在包C:\Entorno Delphi XE3\BPL\Kactus.BPL中引发了异常类EFilerError:组件TKsAnalExpr无法由包Kactus.BPL注册,因为它已由包KactusOP.BPL注册

我使用名称空间更改了单元的名称,例如分别在
PkgeBDE.UAnalExpr
PkgeFireD.UAnalExpr

但是当我再次尝试安装第二个软件包时,它会显示上面相同的错误消息

我正在使用XE3UPD1和FireDAC8.0.5


PD:如果有人想知道,“AnalExpr”代表“Analizador de Expresiones”。嘿。

简单地说,您不能有两个注册组件具有相同的名称。特定框架(VCL或FMX)中的组件只有一个名称空间

考虑流框架如何在.dfm文件中解决类似的问题

object MyComponent1: TMyComponent
它知道需要实例化
TMyComponent
的实例。因此,它在该类注册表中查找名为
TMyComponent
的类。如果有可能有两个同名的类,那么这种查找就没有意义了


您必须确保注册组件的名称是唯一的。

提示:不要,只是不要使用“Anal”而不是os Analise、Analisis或类似的名称。您可以重新设计类,以便TKsAnalExpr有一个名为Engine的属性,当您将其放到表单上时,您可以将Engine属性连接到TKSBDENGINE或TKsFireDACEngine。您是否注意到,例如,有一个TDataSource类和多个TDataSet可以连接到TDataSource?同样的想法。谢谢你的回答,我理解你的观点,但是在Delphi中,这种配置有很多情况,例如:TButton组件,它包含在两个包中:dclfmxstd170.bpl和dclstd170.bpl。谢谢。采取了特殊措施将组件与不同的框架分离。我认为你没有这个选择。在.dfm文件中,当流式框架遇到
对象Expr1:TKsAnalExpr
时,您希望实例化哪种类型?@ErikFerneyCubillosGarcia:一个组件可以存在于多个包中,但不能同时加载这些包
dclstd170.bpl
用于VCL,
dclfmxstd170.bpl
用于FireMonkey。这两个框架不是设计为一起使用的,它们各自的包也不是同时加载到IDE中的。@Remy它比这稍微复杂一点。这两个包可以同时加载到IDE中。每个框架的名称空间都是隔离的。@RemyLebeau我认为
groupgroundswith
是隔离机制的关键。大概