2009-02-27 133 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