在Delphi XE2中使用.NET程序集

我有一些在.NET中实现的业务逻辑,还有一些在Delphi中实现。 现在我打算升级到Delphi XE2。

我们是否有任何规定可以从Delphi XE2中使用.net程序集?

更新:我听说过Hydra框架 ,它使我们能够集成托管代码和非托管代码。 任何人都可以用一个小的演示/代码片段来解释更多吗?

更新:我在这个Hydra框架的试用版上尝试了一些东西。 但它需要修改您的.NET程序集以创建接口,以便我们可以将其与Delphi代码进行映射。

有没有任何方式来消费.NET程序集而不修改它?


看看AToZed CrossTalk,它可以在不使用COM互操作的情况下直接使用.NET程序集。


Nilesh, 我只能从Delphi 6开始回答这个问题 ,所以请记住,Delphi XE2可能有更新的.NET互操作选项。

因此,要从(你的)Delphi 6应用程序中使用(你的).NET程序集功能,最简单的方法是将.NET程序集修改为COM可见,并简单地在Delphi中使用所述COM接口。

从.NET项目 ; 将所需的功能提取到一个或多个接口中,然后将GUI属性应用于这些接口。 在项目选项中将项目标记为“COM Visible”并重建。 您需要使用COM注册程序集(如果内存正常,请从命令行运行regsvr!)

来自德尔福 ; 执行类型库的导入以从程序集DLL中获取TLB,然后将CoCreate()与适当的GUID一起使用,并像使用其他任何COM libbry一样消耗。


关于XE2,唯一可能突破的新功能应该是64位。

但是从COM的角度来看,可能要用32位或64位代码来实现或调用COM对象。

COM对象类型通过注册表项进行注册。 这是regasm.exe实用程序的功能(写入注册表)。 32位的注册表节点和明显不同于64位的注册表节点。

例如,如果您的COM对象编译为32位,则应在32位注册表或64位注册表中注册(通过reagasm调用)

但是如果你坚持使用32位的Delphi应用程序,那么如果你指定COM包装器被导出为32位的话,你就不会有任何额外的问题。 简而言之,当创建32位进程时,XE2的行为与以前版本的Delphi完全相同。

有关更多信息,请参阅http://www.gfi.com/blog/32bit-object-64bit-environment。

另一种解决方案可能是将COM对象从流程中移出:在这种情况下,位的性能无关紧要,您不应该对32位或64位有任何问题。

请注意,XE2中存在一个非常恼人的错误:简而言之,在某些情况下,COM访问被破坏。 听起来像最新的“更新包2”解决了这个问题。

当然,如果您使用Delphi XE2的跨平台功能,则您的COM对象在Mac OS X中将不可用;;)

链接地址: http://www.djcxy.com/p/59877.html

上一篇: Consume .NET assembly in Delphi XE2

下一篇: Delphi XE2: Does FastMM work with Win64 application?