在Delphi XE2中使用.NET程序集

时间:2011-11-03 12:28:13

标签: .net delphi delphi-xe2 hydra

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

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

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

更新:我在 Hydra Framework 的试用版上尝试了一些内容。但它需要修改您的.NET程序集以创建接口,以便我们可以使用Delphi代码映射它。

有没有办法在不修改它的情况下使用.NET程序集?

4 个答案:

答案 0 :(得分:4)

看一下AToZed CrossTalk,它可以直接使用.NET程序集而不使用COM互操作。

答案 1 :(得分:1)

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

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

来自.NET项目;将所需的功能提取到接口(或接口)中,将GUI属性应用于这些接口。在项目选项中,将项目标记为“COM Visible”并重建。你需要用COM注册程序集(如果内存服务的话,从命令行运行regsvr!)

来自Delphi ;执行类型库的导入以从程序集DLL中获取TLB,然后只使用适当的GUID CoCreate()并像其他任何COM库一样使用。

答案 2 :(得分:1)

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

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

  

COM对象类型通过注册表项注册。这是什么的   regasm.exe实用程序(写入注册表)。 32位位注册表   节点,与64位注册表节点明显不同。

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

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

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

另一种解决方案可能是将COM对象从进程中运行:在这种情况下,bit-ness无关紧要,你不应该有任何关于32位或64位的问题。

请注意there was a very annoying bug in XE2:简而言之,COM访问在某些情况下被破坏了。听起来像latest "Update pack 2"的问题解决了这个问题。

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

答案 3 :(得分:0)

您可以执行所谓的非托管导出

Delphi Prism在语言中支持它,C#/ VB.NET没有。但是有一个项目模板可供使用,请参阅author site

非托管导出是一种允许本机代码调用托管代码而无需COM互操作的技术。吉塞克先生have an article on the subject