簡體   English   中英

在將傳統C ++組件之一轉換為C#時需要建議

[英]Need advice in converting in one of the legacy C++ component into C#

當前,我們正在開發一個C ++遺留代碼庫,該庫由幾個軟件組件組成。

其中一個組件的編寫方式極難維護。 (例如,內存分配是在X位置完成的,但是內存取消分配是在Y位置完成的。這使內存管理非常痛苦)。 到目前為止,我們已經能夠解決(或解決)所有內存泄漏問題。

但是,經過幾輪錯誤修復之后,我們的感覺是,由於該軟件組件的高昂維護成本,我們離目前的里程碑不太遠。

我知道重寫源代碼可能是不好的: http : //www.joelonsoftware.com/articles/fog0000000069.html

但是,我們認為與其重新構建當前代碼,不如從頭開始重新編寫,因為

  • 到目前為止,團隊中沒有人能完全理解該軟件組件代碼。
  • 遺留軟件組件是一小部分軟件。 我猜大概2萬行
  • 我們的團隊非常清楚要求和我們要實現的目標

因此,我們計划使用托管代碼, 至少使內存管理成為一件輕松的事 我們計划選擇C#,因為

  • 我們所有的C ++代碼都是使用Microsoft VC ++編譯的
  • 我們在其他軟件組件中使用MFC。 (以DLL形式)每個DLL都有自己的資源。

我來自C ++和Java背景,對C#一無所知。

  1. C#與MFC DLL以及某些DLL函數的接口將如何調用MFC GUI?
  2. 我需要注意什么嗎?
  3. 如果使用托管C ++,與舊版C ++ DLL的接口會更容易嗎?

謝謝。

我處於類似的情況,我還做了一些混合C ++和C#的實驗。 我的應用程序中的問題是:

  • 該應用程序未明確划分為不同的模塊,因此很難將特定的模塊從C ++遷移到C#
  • 該應用程序占用大量CPU,並且實驗表明從C ++到C#或從C#到C ++的調用會產生大量開銷

另外,您不能直接從本機/非托管C ++調用C#,這意味着我不得不引入一個附加的中間C ++ / CLI(或稱為C ++。Net?)層。

因此,我選擇不遷移到C#,而是繼續使用C ++。

因此,如果要從C ++遷移到C#,請確保:

  • 您已將模塊明確分開
  • 從C ++到C#的轉換(調用),反之亦然(不在cpu密集型任務中)

此外,請記住,如果您不是該項目的唯一開發人員,則所有(或大多數)開發人員都應學習C#。 您不想將所有C#代碼委派給最新的初級開發人員,因為如果他離開,您將(或可能)遇到麻煩。

C#與MFC DLL以及某些DLL函數的接口將如何調用MFC GUI?

一點也不好。 您不能P /調用C ++庫-它僅適用於C導出。 您可能需要編寫一個包裝程序,以便為您從C#進行P / Invoke公開一個C庫接口,或者您需要使用C ++ / CLI重新編譯MFC。 盡管Winforms是與MFC的.NET代碼類似的庫,但沒有理由這樣做。

我需要注意什么嗎?

我不明白那個問題。

如果使用托管C ++,與舊版C ++ DLL的接口會更容易嗎?

考慮到您無法使用C#做到這一點,是的。 您必須重新編譯這些C ++ DLL才能使其具有C接口,或者您必須使用C ++ / CLI從源代碼進行重新編譯。


注意:無論您在此處做什么,都仍然需要擔心本機代碼中發生的任何事情的內存管理和對象生存期。 CLI不會自動為您管理本機資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM