前にVB6.0から.NET C#への移植を行った際の記事を書いたが、またコンバートを行う機会があったので、前回行ったコンバートを元に前回と違う点を記載して、手順を簡単に記述しました。
コントロール配列などは、前回の記事のコントロール配列クラス(ControlArrayクラス等)のコードを参照してもらいたい。
VS2008を使用して、VB6から、Vb.Netへコンバートするのは、前回と同じです。
この記事を書いている時の最新のVisual Studioは、Visual Studio 2022が最新ですが、Visual Studio 2019でも問題ありません。
ただ、Visual Studio 2017ですと今回使用している「Code Converter」が使用できないかもしれません。
ちなみにVB6と書いてますが、VB6だけがコンバート対象ではなくVB5等でも同じなので、以降ではVB6やVB5等をVBと記載することにします。
Vb.NetからC#へのコンバートは、前回は他のツール(SharpDeveloper)を使用してVb.NetからC#のコンバートを行いましたが、今回はVisual Studioのみで行うためにVisual Studioの拡張機能である「Code Converter」を使用して、Visual Studioのみでコンバートできるようにします。
「Code Converter」はこちらからダウンロードしてVisual Studioを終了してインストールしてください。
VB → Vb.Net → C#へのコンバート手順について
VBよりVb.Netへのコンバート準備として、VBでOCXやDLLの参照が可能なコンパイル環境を必要とするため、OCXの登録を行った後にVb.Netへのコンバートを実施します。
今回のコンバート時のことなんですが、C#バリバリのプログラマーでもOCXってなに?って人もいるようなので、ちなみにOCXの登録は、regsvr32.exeを使用して登録します。
登録出来ないOCX等がある場合は、VBのプロジェクトファイルをテキストエディタで開いて、対象のOCXの行を削除、またはコメントアウトして除外します。
ただし、VBのコードによっては、OCXが未登録のときにVBよりVb.Netへのコンバートで大量のエラーが発生する場合もあるので、できるだけVBの環境で正常にコンパイルが可能な環境で、Vb.Netへのコンバートを行うようにしてください。
では、Visual Studio 2008で、コンバート対象のVBプロジェクトを読み込みVb.Netへのコンバートを画面に従って行ってください。
コンバート後のファイルは、「<VBプロジェクトファイル名>.NET」ディレクトリに格納されるのでディレクトリを確認してください。
Vb.Netへのコンバートが完了したら、コンバートされたVb.NetのソリューションをVisual Studioで読み込んでください。
「Code Converter」をインストール済みであれば、プロジェクトを選択して右クリックで表示されるポップアップメニューより「Convert to C#」で、C#にコンバートしてください。
C#へのコンバートが終了したら、Vb.Netのファイルは必要ないので削除してくださ。
通常は、二度と見ることはないと思いますが、心配性の人は、Vb.Netのソリューションを圧縮保存してから削除してディスクスペースを開けてください。
コンバートの共通事項として対応する内容を書いておきます。
Microsoft.VisualBasic.Compatibilityの廃止。
Microsoft.VisualBasic.Compatibilityは、VBからVb.NetへのコンバートでVBのコードをそのまま動作可能にするためのモジュールなので、今後のことを考えると削除する方向で進めます。
コンバートが完了してコンパイルが通るようになった時点で、Microsoft.VisualBasic.Compatibilityのusingをコメントアウトして、エラーが発生しているロジックをC#へ置き換えしていきましょう。
Microsoft.VisualBasic.Compatibilityは、LabelArray、TextBoxArrayなどのVBでのコントロール配列のコンバートで使用されるので、前回の記事を参照してもらって、各コントロール用の配列クラスを使用するように置き換えてください。
参照しているAxXxxxx等のモジュールの廃止。
AxXxxxxは、VBにて参照していたOCXやDLLであるため、これも先程と同様に正常にコンパイルできるようになった時点で、.NETのモジュール等へ置き換えを行います。
自作のOCXやDLLなどは、C#に置き換えるほうが良いが、C言語やC++言語で作成されている場合、C++/CLIに置き換える方法もあるので、検討してみてください。
フォント定義の変更
FormXxxx.Designer.csのフォント定義を変更して、FormXxxx.Designer.csファイルのフォント定義の一部を変更します。
Convert.ToByte(0) ⇒ ((byte)(0))
変更例。
this.label1.Font = new System.Drawing.Font(
“Times New Roman”, 9f, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, Conversions.ToByte(0));
↓
this.label1.Font = new System.Drawing.Font(
“Times New Roman”, 9f, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
デザイナで全て設定し直す方法でも良いです。
全てのコントロールが同じフォント、サイズであれば、フォームへ設定することで、フォーム内のコントロールは、同一フォントとサイズが使用されます。
UPGRADE_WARNING:、UPGRADE_NOTE:の対応を行う。
UPGRADE_WARNINGやUPGRADE_NOTEに記載されたメッセージを確認してそれぞれに合った修正を行う。
排除する名前空間。
Microsoft.VisualBasic.Compatibility、Microsoft.VisualBasic.Compatibility.VB6など
Microsoft.VisualBasic名前空間のオブジェクトの置き換えを行う。
その他について
- フォームのコンストラクタの移動等の既定のコンバート。
- フォームのコントロール配列。
- プロパティ定義については、デザイナから、フォーム定義に移動する。
- メソッドパラメータがコンバート時にrefとして定義されるので、参照であるか確認してrefの廃止を行う。
詳細については、前に書いたこちらの記事を御覧ください。