2011-06-06 29 views
3

我在暑假期間在一家公司實習,我必須考慮以不同的方式查看當前的代碼庫(C++,MFC,大約100K行)並使用狀態機爲當前程序建模。C++代碼庫從MFC重寫爲* nix

我一直在閱讀幾篇論文,CPP2XMi看起來可能會嘗試構建序列圖作爲開始。

最終目標是評估從微軟作爲操作系統移開的可行性,並在* nix上查看開發(可能是另一種語言)。

我也開始看MFC的依賴,看看我們是否可以移植當前的C++代碼。

我已經通過WINE和性能方面運行該程序,似乎可以接受,但我仍然需要調查其他解決方案,因爲這隻能在X86上運行,而我們有其他解決方案運行在MIPS和ARM上運行。

任何其他想法或警告,我可以看看?

+5

領結是華麗的領帶,我認爲你的意思是警告。而且,比你更適合我 - 將平均一堆的MFC應用程序轉換爲可移植的代碼將使勇敢的人變得更加聰明。 – 2011-06-06 20:48:42

+0

也許他穿着領結更好地編碼? – 2011-06-06 20:50:13

+0

尼爾 - 我真的大笑起來[我也是誦讀困難]。我想我會離開它! – LewisMc 2011-06-06 21:03:13

回答

1

我會首先看的是我在哪裏使用mfc和其他非便攜式東西。例如,如果唯一有mfc的地方在界面層中,則可以分離工作。

如果沒有這樣的分離,我會看看創建一些隔離和便攜代碼段的不可思議性。一旦你有了可移植性的基礎,你就可以開始抽象非可移植代碼提供的所有服務。任何你切片的方式,雖然MFC到尼克斯是一個巨大的變化,將需要大量的工作。另一種可能性是看你是否可以在Windows模擬器下運行它。

+0

我一直可靠地獲悉,大多數依賴關係都是圍繞Coms和GUI。重寫這些我不知道(還)多少工作。我已經用可接受的基準測試了葡萄酒,沒有(測試過的)功能缺失。 – LewisMc 2011-06-06 21:05:18

+1

@LewisMc:對我來說,唯一可靠的信息形式就是進入自己看,並做一個概念驗證;在我的經驗中,MFC自然是侵入性的(甚至是普遍的),因爲使用它的二進制歸檔等集合類非常方便。只要你繼續使用MFC/ATL家族,所有東西都是緊密相連的,因此緊密耦合。這些相互依賴性幾乎不可能被擺脫,特別是以漸進的方式。 – sehe 2011-06-06 22:22:16

+0

接受了您的建議並編寫了一個快速對話應用程序,我將把它移植到第一手。謝謝回覆。 – LewisMc 2011-06-07 14:54:48

0

我曾經從MFC移植一個大的COM庫到可移植的代碼。我使用STL和boost來替換所有的MFC位。例如,CString => std :: string和VARIANT =>boost::any

花了永遠,但它大多是直接更換和調整。幸運的是,它沒有任何gui代碼 - 它是一個數據處理庫。

+0

我也被要求查看界面語言/標準,因爲GUI是'分開'的[儘可能],所以這可能是一個選項。 – LewisMc 2011-06-06 21:10:33

1

通過閱讀通過wxWidgets書,它看起來非常類似於MFC。你可能會看看它。

1

我會先看看GUI是否與應用程序的其餘部分分離。使用MFC時,這包括將實用程序類(如CString)限制爲僅使用GUI的代碼。

如果以這種方式對代碼進行了充分考慮,最簡單的做法是將MFC GUI代碼放在一邊,然後使用每個新的本地GUI庫爲其他平臺構建新的GUI平臺。這將爲應用程序提供適當的本機外觀和行爲,這是很難以其他方式實現的。

如果應用程序邏輯與GUI代碼混在一起,那麼現在是問您是否可以投入資源來創建適當的分離的一個好時機,目標是在您完成分離後完成上述操作。從商業的角度來看,這是有風險的,因爲它可能看起來像你做了很多努力並且只是最終回到你開始的地方。直到你開始在重構應用程序上面的新GUI上工作,你的贊助商纔會看到任何真正的進展。

您還可以查看便攜式GUI庫,如wxWidgetsQt

我已經編寫了MFC和wxWidgets,它們在概念上非常相似。我從來不需要將代碼從一個端口移到另一個端口,但我曾經從Borland's OWL移植到MFC,這是一個類似的體驗。這種事情並不是特別困難,這只是一個磨練。我只能建議在刪除舊的GUI庫時有多種原因。例如,也許你也在考慮完全刪除Visual C++,或者從Professional切換到Express,從而無法訪問MFC。如果您打算堅持使用VC++ Professional(或更高版本),則很難證明您丟棄了MFC GUI。