2009-02-27 113 views
5

我目前有一个delphi(win32)代码的代码库。我想扩展新的功能,但是,我的知识是.NET(C#),我想保留现有的代码库并在.NET中添加新的功能。德尔福与.NET的互操作性

什么,如果有的话,我的选择(为delphi和.NET互操作)?

谢谢!

回答

7

我没有使用它,但检查出RemObject Hydra

水润很容易混搭 本地Delphi和管理的.NET代码 一个应用程序,允许 开发商选择 技术为他们需求的最佳设置。

基本上,您可以将Visual和非Visual .NET代码嵌入到您的Delphi应用程序中,并像使用Delphi本机一样使用它。他们有免费试用版,现在有一场比赛正在运行,你可以在win a free copy by reviewing the free trial

除此之外,你可以使用.NET via COM in Delphi。 .NET程序集可以使用C#,Prism,VB.NET或任何.NET语言。

6

有几个选项:

  • 它可以创建并在组件中作为COM控制(互操作),以便它是在Delphi可用暴露的.NET类。 Delphi是.Net一段时间(但它不是德尔福最亮的小时),所以以Delphi 2006为例,你可以使用Delphi作为.Net语言。然而,就像其他Delphi版本的变化一样,如果不是更多的话,那么与旧的源代码就会有不兼容的地方。

编辑 做的第一方法,你要创建一个类/功能,你在.NET语言需要和编译程序集。你应该最终得到一个DLL。

在Delphi中,在Component菜单下,选择Import Component(它应该在Install Packages下面)。你会得到它应该有3个无线电选项

向导
  • 导入类型库
  • 导入ActiveX控件
  • 导入.NET程序集

选择第三个,你会看到一个列表全球注册的程序集。由于您的程序集只是一个匿名DLL,因此请单击底部附近的添加,然后在打开的对话框中选择DLL。

在下一页上,您将被要求提供调色板信息。在这里您可以选择 - 指定您的项目文件夹,并且不选中“生成组件包装”,只将程序集添加到您的项目中。另一种选择是将其放在lib或其他全局文件夹中,并检查包装选项,该选项将其添加到所有项目的工具选项板中。

最后一个屏幕会询问您是否要将其添加到当前项目中(取决于您是在全局添加它还是仅添加到一个项目)。

当一切完成后,你应该能够创建在Delphi中你的.NET类的实例像这样的东西:

var MyCSharpClassInstance: TMyCSharpClassProvider; 
begin 
    MyCSharpClassInstance:=CoTMyCSharpClassProvider.Create; 
    … 
    MyCSharpClassInstance.Free; 
End 
2

但您可以编译的Delphi代码利用最新的.NET Delphi Prism(即2009年) 。使用Delphi文件可以创建一个.NET程序集,并且它们可以定期使用C#扩展这些类。

如果你的课程是密封的,你也可以使用扩展方法。

+0

小心。 Prism在许多方面都不符合Delphi代码。您可以在这里获得概述:http://prismwiki.codegear.com/en/Win32_Delphi_vs._Delphi_Prism – 2009-02-27 17:42:45

0

我相信在几个版本之前,Delphi有.NET编译。

http://www.codegear.com/products/bds2006

“开发工作室2006年包括C和C#除了德尔福的Win32和Delphi的.NET编程语言完整RAD支持。”

+0

没有帮助,因为即使使用相同的IDE,dotNET和本地语言之间也没有互操作性。 – dummzeuch 2009-02-28 17:11:03

+0

不需要互操作性,只需在.NET中编译语言即可。是的,我知道,说起来容易做起来难,但它仍然是.NET的解决方案。 – 2009-02-28 18:29:01

0

你可以看看here,它们为Delphi.Net生成一个编译器。这可能是一种前进的方式。

+0

@Blounty:Oxygene现在是Delphi Prism,可通过CodeGear获得。我不认为Oxygene可以单独购买(尽管由于某种原因,我现在无法从此处访问RemObjects站点进行检查)。 – 2009-02-27 19:22:27