web-dev-qa-db-ja.com

VB6コードをC#に変換するにはどうすればよいですか?

VB6コードからC#に変換する方法を知っている人はいますか?

これを行うためのツールはありますか?

35
basl

VisualStudioはVB6からVB.NETへの変換を行うためのウィザードを提供します(または少なくとも提供されます)(その後、#developのVB.NET <-> C#コンバーターによって支援されて、少しの作業でC#に変換できます)。最後に私がそれを使用したとき、自明ではないことのために、多くの手動作業を行う必要があったので、これが大規模で重要なアプリケーションである場合は、手作業で書き直したり移植したりするほうがよいと思います。

27
theraccoonbear

それは少し生意気に聞こえるかもしれませんが、あなたの脳が使用するのに最適なツールかもしれません。書き直す価値があるかもしれません。

多分それを移植する必要はありません。 VB6をCOMコンポーネントに変換できますか?ジュディ裁判官に間に合うように、COMへの移植、C#からの呼び出し。

12
Derek Smyth

これを何度も行った人として、これは簡単なプロセスではありません。 この答え に記載されているVB6からVB.Netへのツールを使用し、ReflectorまたはSharpDevelopを使用してC#に変換できます。 SharpDevelop変換では、いくつかの注意点があります。それはすべての配列参照をねじ込み、それらを関数呼び出しであると見なし、すべての論理演算子がビット単位の論理演算子に変換されます(かつ&&ではなく&になります)。 Reflectorを使用すると、多くのものを失います。また、Visual Studioコンバーターは多くの大きなプロジェクトで失敗し、ハングアップして完了しません。

コードをC#に変換したら、実際の作業を開始する必要があります。変換により、最大で50%の方法が得られます。大量のデータを修正し(コードがTODOで散らばっているのがわかります)、大量のデータをリファクタリングする必要があります。最後に、C#が残ります。あなたのVB6の表現-あなたが本当になりたい場所ではない非常に素晴らしいVB6コードがない限り。また、すべてのコードは、適切なDotNet関数を使用するのではなく、VBヘルパーで散らかされています(すべての文字列関数は、examples0のクラスオブジェクトではなくヘルパーです。すべてのバリアントをすべて多くのAPI呼び出しを使用した場合、書き換えが必要になる傾向があります。

最終的にはベースが得られますが、大規模なプロジェクト(20〜30のフォーム、30のクラス、30のモジュール)の変換には数人月かかることがあります。ただし、ゼロから書き換えると、2倍の時間がかかり、すべてのビジネスロジックが失われます。だから、それはできます(私は3つまたは4つの大きなプロジェクトでそれを行いました)が、万能薬や銀の弾丸はなく、あなたのためだけにそれを行うと言うツールは嘘をついています。

10
Kris Erickson

新しいバージョンのVisual Studioでプロジェクトを開き、コードをVB.Netに変換し、C#変換に役立つ 。Net Reflector をダウンロードします。

幸運を!

8
sebagomez

Artinsoft (現在は Mobilize.Net に名前が変更されています)これだけを行います。具体的には Visual Basic Upgrade Companion です。

ただし、VBUCを使用した後でも、手動で移行/保証する必要があるシステムの一部の部分が残っています。しかし、それは通常、元の問題のはるかに小さなセットです。また、一部の移行の問題は、過去の移行の経験により解決されています。

Artinsoftは、アライグマの投稿で言及されている、Visual Studioに同梱されているウィザードを作成した会社と同じです。ただし、間違いがない場合、ウィザードはVB6をVB.Netに移行するだけです。

完全な開示:Artinsoftで働いています

8
Esteban Brenes

簡単に言えば、VB6とVB.NET(およびその結果C#)は別々の言語ですが、関連する言語です。 2つのプラットフォームの間には、多くの微妙な(Int16の代わりにInt32である整数)および全体的な違い(グラフィック、フォーム、および印刷エンジン)があります。これを、まったく異なるプラットフォームに変換する場合と同様に扱う必要があります。

問題はここでより完全に調査されます

大きなアプリをVB6からVB.NETに切り替える方法

4
RS Conley

マイクロソフトでは ArtinSoftのVisual Basic Upgrade Companion(VBUC) を推奨しています。

MicrosoftとArtinSoftは提携して、無料のVBUCライセンスを提供しています。以下の割引コードを使用して、最大10,000行のVB6コードのアプリケーションをVB.NETまたはC#に無料で移行できるライセンスを購入できます。より大きなライセンスを購入するときにも適用できます。

完璧ではありません。結果のコードは、コンパイルするまで多くの手動修正が必要ですが、このツールは試してみる価値があります。

3

自問する1つの質問は、VB.NETではなくC#を使用することの重要性です。大規模なアプリケーションを変換する場合は、おそらくVB.NETにアップグレードするほうが安価です。

VB6にはいくつかの機能があり、C#にはまったく同等の機能はありません(エラー処理、遅延バインディングなど)。それらをサポートするVB.NETに行くことができるとき、それらを変換するために手動で努力する価値がある理由を自問してください。

そして、あなたが私を信じないなら(そして誰も私の答えに投票しなかったなら、すすり泣きなさい!)多分あなたは信じるでしょう Francesco Balena とDan Appleman(本の中で VBへの移動) .NET )私に同意する人。

2
MarkJ

GreatMigrationsでは、これを手作業で行っています。私たちはVB6/COMコンパイラを開発するために私たちの手を使っています。コンパイラはVBP(または関連するVBPのグループ)と参照されたCOMライブラリを読み取り、「セマンティックモデル」を構築します。このモデルは、定義されたすべての情報構造とソースシステムによって実行される操作を完全かつ正確に記述する、非常に詳細なシンボルテーブルとオペコードストリームのセットです。

次に、このツールは、モデルを変更および再構築して.NETとの互換性を高める一連のアルゴリズムを適用し、オプションでカスタム変換を適用します。たとえば、COMコンポーネントを.NETクラスに置き換える。変換ルールは人が設計し、独自の要件を満たすために「手動」で作成されます。

最後に、モデルは「実行」されますが、データモデルを割り当てて操作を実行する代わりに、ターゲットプラットフォームの表記法でファイル構造、データモデル、および操作を作成します。このアプローチを使用して、VB.NETとC#の両方を作成できます。このプロセスを使用して、ASPサイトをASPXに移行します(多言語のFORTRAN-to-C製品もあります)。

このアプローチでは、最初から試用段階でソフトウェアを作成することはできませんが、ツールの構成を変更して翻訳プロセスを再実行することにより、改善して「より良い」ソフトウェアを作成することができます。私たちのツールの利点は、アジャイルなツール支援の書き換え方法論を促進するその再現性、速度、および柔軟性です。 IMO、私たちのアプローチを活用する移行チームは、機能要件の再収集、手作業でのコーディング、テストではなく、再設計の代替案の評価と開発プロセスの改善に多くのリソースを割り当てることでメリットを得ます。最終的には、移行後のシステムのメンテナンスと移行後の元のアプリケーション機能のはるかに忠実な再現、移行中の制御と可視性の向上を享受できます。

ツールの試用版はこちらから入手できます gmStudio Trail Request Download 。これにより、最大10K LOCのASP/VBコードを試して、最大30セッションで実行できます。

1
mark