VB6 到 C#
基於 VB6 的 VB6 -> C# 2017 轉換器。
用法
免費使用。免費分叉。免費貢獻。免費詢問。免費出售。以您自己的名義免費出售...可以自由地做任何事情,除了說我不能(請參閱許可證)。
請參閱下文以了解基本資訊。請參閱 Wiki 以獲取更多詳細資訊。請隨時聯繫尋求支援。
快速入門
- 開啟檔案
prj.vbp
,啟動程式(需要 VB6 IDE)。 - 透過按鈕在
Config
表單中輸入一些配置值。 - 現在您已經選擇了項目,請按一下
SCAN
按鈕。這有助於轉換器了解不帶括號的方法和變數/常數之間的差異。它還建立了完整的導入清單(可以透過 ^K^E 在 VS 2019 IDE 中清理)。 - 如果需要,請按
SUPPORT
以產生基本項目支援結構。- 或者,可以直接從專案根目錄複製檔案
VBExtension.cs
和VBConstants.cs
並將其包含在其他位置。
- 然後,輸入檔案名稱並點擊
Single File
以嘗試轉換您在其旁邊輸入的檔案。
如果您想轉換整個項目,只需按一下ALL
,它將立即執行掃描、支援產生和整個項目轉換。
注意:它可能不是最快的,它仍然需要手動操作,但它比全部手動完成要快!
更新2021-12-01
轉換器的原始版本以逐塊的方式解決該問題,將每個邏輯程式單元分離成自己的字串並自行轉換。結果,轉換器進行了多次通過,基本上運行速度極為緩慢。將 linter 更新為不使用這種方法,而是簡單地從上到下運行程式碼後,很明顯,轉換器可以以同樣高的精度完成相同的操作。
因此,今天透過主視窗上的單選按鈕發布了轉換器的 v2,以及 v1。您可以隨意混合搭配,用一個轉換整個項目,然後用另一個轉換單個文件。希望透過這兩種完全不同的方法,其中一種會比另一種效果更好,並且會減少工作量。同樣,它們的轉換率仍然只有 80-90%。有很多事情您必須手動完成並仔細檢查(例如循環邊界),但同樣,它肯定比將 VB6 程式碼中的所有&
更改為 C# 的+
更好。
我該如何...?
當談到轉換時,有很多問題。如果您只是想了解此轉換器處理特定模式的方式,請參閱我如何...?我們的維基頁面。
無論您是否使用此轉換器,我們都會為常見的轉換難題提供解決方案。我們的解決方案快速、切題,通常不會使用大量程式設計或上下文開銷。雖然它們可能依賴我們的擴充模組,但所有這些都是本機 C# 程式碼,並且通常與您在 VB6 中所做的非常相似。
要求
轉換器要求
- 此轉換器在 VB6 IDE 中運作。您知道,您要轉換的程式的 IDE。
轉換後的程序要求
- Visual Studio 支援一些相對現代的 C# 版本。或交替。
- Visual Basic Power Packs/另一個連結/在 Repo 中提供,因為有時很難找到
- 允許直接在 C# 程式碼中使用標準 VB 函數,如
Mid
、 Trim
、 Abs
、 DateDiff
等。 - 確保與 VB6 功能 99.9% 相容(
Format
除外),無需第 3 方黑盒庫(它來自 MS,因此它是第 1 方黑盒)。 - 一旦轉換並啟動並運行,就可以輕鬆迭代。
指示
有關使用的更多信息,請參閱 wiki。
設計考慮因素
- 簡單 - 並非設計用於實現 100% 轉換。也許只是 80% - 90% 的繁重工作。
- 基於 VB6 - 因為,為什麼不呢?如果您要從 vb6 進行轉換,則必須有一個可用的 VB6 編譯器。
- 自訂 - 這是為個人專案創建的,因此是專門為我們的用例量身定制的。但是,沒有任何理由說明有人不能調查邏輯並針對自己的任何問題進行調整。
- 機會主義 - 該程式碼嚴重依賴 VB6 IDE 的相對一致性:
- 間距相對一致,因為 IDE 強制執行。
- 可以保證關鍵字大小寫。
- 我們利用 Microsoft Power Pack,並且不需要轉換大部分核心 VB6 語句。此外,您可以像在 VB 中一樣繼續使用
DateDiff
、 Left
、 Trim
等語句。或者,如果您願意,可以在轉換後開始遷移。我們只是引入 Microsoft 的庫以獲得最大兼容性,因此,沒有大型字串替換庫,也不像某些轉換器那樣嚴重依賴我們自己的 DLL 或庫(我們生成一些是為了簡化語法,但最終結果是純C# 程式碼)。
- 非假設 - 它假設程式碼是在 VB 中編譯的,因此它不會假設不會找到它無法解析的參考。
- 通用導入 - 導入每個程式碼模組,就像 VB6 自動執行的那樣。讓 Visual Studio 簡單地透過最佳化轉換後的匯入來決定使用哪些檔案。
- C# 2017 - 這是一個後來者。從來沒有針對 VB6 -> C# 的免費軟體解決方案,現在 VB.NET 或多或少已經停止使用,為什麼不呢?
已知問題(僅限 v1)
- 目前,轉換器通常會拒絕在其中任何位置包含“屬性”一詞的檔案(屬性聲明除外)。雖然這是一個痛苦並且可能會被修復,但在項目實用性接近尾聲時遇到了它(因此在修復列表上並不緊急),並且在它阻礙進展的地方,包含單詞“...Property”的變數只是暫時重新命名為「...Prppty」之類的名稱,然後在轉換後的檔案中改回原來的名稱。
- 這個問題已在版本 2 中得到解決,但在某些情況下,它可能仍會出現在 v1 中。
缺點
- 這不會產生以其生成形式進行編譯的程式碼。最後一英里的自動化成本最高,而且通常最好手動完成。讓某些東西充分發揮作用,並手動完成任何邊緣情況或最終轉換似乎更方便。
- 有限的 UI 自訂(但無限的基於程式碼的客製化)。這不是最可自訂的解決方案。當然,除非您想深入了解轉換器的一些原始程式碼。但是,這就是它可用的原因。
- 無絨輸出。從風格上看,產生的程式碼是一團糟。這就是現代 IDE 的用途。所有錯誤的格式都可以用 ^K^D 清除。未使用的導入帶有 ^K^E。而且,您可能想要刪除許多額外的 { 和 }。
- 目前轉換器在循環邊界方面確實很糟糕。抱歉,這是 VB6->C# 轉換的陷阱之一,而且它的轉換方式沒有太多邏輯。這很乏味,但要在專案範圍內搜尋所有 for 循環並手動檢查邊界。
- 每個事件都有一個額外的方法。一張用於正確簽名,一張用於原始簽名。在大多數情況下,冗餘是不必要的,但它提供了最簡單的轉換。在大多數情況下,這些可以簡化為單一方法(但不是全部,這就是我不這樣做的原因)。
注意:轉換器知道的大多數地方都會出現問題,它會用// TODO:
註解來註解程式碼。請務必徹底解決其中的每一個問題。
優點
- 它是免費的。
- 你有源(定制它,無論如何)。
- 一次執行整個操作或僅執行一個檔案。
- 這比全部手工完成要好得多。
- 它可以讓您很好地了解正在發生的事情,而無需進行所有手動操作來進行簡單的轉換。
- 這不是最快的轉換,但卻是一種簡單的轉換(但 v2 變得更好了)。檢查
ConvertSub
或ConvertPrototype
等函數。- 但想一想......您希望一次性進行轉換,而不是在轉換執行期間一遍又一遍地運行。
- 允許檢查某些內容是如何轉換的。不喜歡輸出?改變它。
- 您可以在任意位置放置 VB6 斷點並停止。此外,只需添加一行,
If LineN = 387 Then Stop
,轉換器就會在那裡停止。
附加功能
- VB6 代碼檢查器。
?Lint
在開始這一過程之前就盡可能消除技術債。 - VB6 表單到 XAML
未來的可能性
該項目基本上按原樣進行。它發揮其作用。但是,需要注意一些事情,例如“擴展屬性”。如果 C# 曾經實現過這個或類似的東西,那麼轉換.Visible = True
就會變得更加直接。因為 C# 現在使用枚舉而不是布林值,所以這是不可能的,但可以透過此功能實現。
接觸
- 如果您確實有任何問題、疑慮,或者只是想要一些快速指導,請隨時提出問題。我不能保證太多,但我會努力!