問題的基本前提似乎是圍繞Delphi核心的C#包裝更容易維護和運行,如果這不是真的,那麼創建包裝的想法就變得不是非常有用。我相信這是一個錯誤構思的概念。
想象一下,我提出了一個可以與望遠鏡交談的應用程序。它完美地完成了。在這種情況下,我可能只能提取望遠鏡通信部分,並將其放入DLL中,然後在C#中編寫用戶界面,該界面使用Delphi DLL來完成與望遠鏡的通信任務。然而,除非你的Delphi應用程序已經被很好的結構化了,除非像這個望遠鏡通信庫這樣的任務已經存在,否則你不會覺得很容易提取Delphi應用程序的任何部分,並從C#中使用它。如果這種情況存在,我會使用原生的Delphi DLL函數導出並從C#中調用它們。這不是使用現有的delphi可執行文件,需要花費很多工作時間來將Delphi應用程序的一部分重構爲可以從C#使用的東西。
另一個答案提到COM服務器,雖然這是可能的,但它不會讓事情變得簡單;像正式表達式的老玩笑一樣;當您遇到問題並嘗試使用正則表達式解決問題時,現在您遇到了兩個問題。當您嘗試使用COM服務器來隱藏您的現有應用程序並使用C#在其上編寫一個全新的UI時,情況也會如此。實際上,需要更多的技術技能來改進,調試並繼續以這種方式進行開發,而不是純粹用delphi或純粹用C#開發它。這是努力的積極節省。
您沒有提供有關Delphi應用程序的信息,但讓我們假設它是一種業務線或垂直市場應用程序,它讀取某種文件格式,或者執行某種通信協議,甚至連接到某個舊數據庫,你不想重寫。
如果通過製作C#用戶界面,您不需要顯示Delphi應用程序用戶界面並將其替換爲C#界面,幾乎可以確定您的想法不會讓任何事情變得更好,並且只能做到事情更糟。你的僵局要麼來自沒有熟練的delphi開發人員,要麼來自沒有聰明的開發人員能夠弄清現有應用程序的功能。
當您處於這種情況時,解決方案通常是一種人性化的解決方案;要麼僱用一名熟練的delphi開發人員,並將應用程序轉移到現代Delphi時代(Delphi XE2)中,要麼僱用一名熟練的非delphi開發人員,並將該應用程序移植到其他語言中。任何人都會建議在delphi應用程序的頂部寫一個「包裝器」,他認爲這會讓它「更容易」,顯然感覺不能重寫現有的應用程序。
我不太瞭解你的delphi應用程序的確如此,但它確實聽起來像「恐懼驅動」決定。包裝舊代碼幾乎不是一個好主意,而且最常見的是創建更多問題。
順便說一下,我不知道在哪裏會有反射。你確定這就是你的意思嗎? – 2012-04-04 16:07:41
幾年前我只看了一下代碼,但它向我解釋說,它使用反射調用Delphi exe,然後在exe中調用某些方法。不幸的是,這是在以前的公司,我無法再訪問該代碼。 – zeencat 2012-04-04 16:16:26
這沒有任何意義。 C#反射不能在Delphi exe下工作。 – 2012-04-04 16:21:13