こんにちは!あまみやです。
今回は、VB6→C#.NETへのソース変換(Convert)対応時に使ったツールについて忘備録としてまとめています。
【経緯】VB6からC#.NETに移行することになりました。一言で言うとすごく大変で、面倒臭いです。しかし、やらなければ。まだVB6使ってるの?というツッコミは聞かなかったことにします。
ではさっそく!
Contents
VB6からC#.NETへのコンバートに使ったツール
諸事情によりフリーソフトをインストールしたりできないので、別のPCにインフトール済みの下記ソフトを使用して、2段階にわけてソースを変換。
Visual Studio 2005には、アップグレードウィザードがあるので、画面の内容に従ってConvertが可能。
- Visual Studio 2005 (VB6からVB.NET)
- SharpDevelop (VB.NETからC#.NET)
【注意事項】
完璧にコンバートできるわけではない。
しかもサードパーティ製のツール(SpreadとかInputManとか)を参照していたりすると変換エラーのメッセージが表示されてしまう。
さらに、定義ファイル(※)はコンバートしてくれない。
※共通変数や定数系をまとめている標準モジュールファイル。
Public Hugo As String
Public Const HOGE AS Long = 100
コンバート済みソースのエラーを修正していく
手作業でソースを修正していく。
エラーの量が膨大すぎたため、使用されている数が多い共通メソッドやクラスから順番に変換していく。
Microsoftの「Visual Basic 6.0ユーザーのための移行ガイド」というPDFファイルがあるので参照しつつ、共通処理から順に変換していく。
余談:R#先生のありがたみを知る・・・。不要な参照を一括で削除したり、メソッドの名前を一括で変更したりするときに重宝。
コンバート時に困ったことベスト3
VB6→C#.NETへ移行する際に一番困ったことを3つほどピックアップ。ついでにどうすればよかったか(どうなっていたら私が助かったか)も書いてみた。
1.同じ処理がまとまっていない
これはVB6に限った話ではないけれど、たとえば文字列に対するチェックやファイルパスに対するチェックは基本的に同じことをするケースが多い。
同じ処理を各ファイルで書かずにまとめておけば、そのメソッドを修正するだけで済むという話。
- コンバートする前に共通化できる部分はしておく
- 複雑な処理には適宜コメントをいれておく
- 似たような共通変数や処理はまとめる
アップグレード・ウィザードで変換してくれるとはいえ、using Visual Basicとかで補われてしまうので
これも排除するとなるとかなり時間がかかるという・・・。
2.VB6で埋め込まれた画像がリソース化された
VB6のソースでImageコントロールに指定されていた画像が、ファイルパスから読み込む形になっていなかったので、画像はファイルとして切り出されず、コンバート後は各ファイルのリソースに入ってしまった。
- 共通で使う画像はファイルパスから読み込む形にしておく
共通で使う画像というと、警告とかエラーとかインフォメーションとかのメッセージでよく見かけるアイコンとかが多いのでは。
3.APIの置き換え
地味に困ったのがAPI関連。
大抵のものは、.NETFrameworkのクラスを使えば実現できるものなので、不要になるケースが多いと思われる。
ただ、独自の処理のために使っている見慣れないAPIは、PInvokeにもIF情報がなかったりして、かなり調べまくった記憶が・・・。
例)同じLAN内のIPアドレスを取得して一覧にする
- どうしようもない・・・IF情報をコメントで記載しておくくらい
VB6に慣れてない人がコンバートするとこういうことになるよという情報。
仕様書さえ作ってあったら1から作る方法を選んだに違いない。
VB6からC#.NETへのコンバート方法案
今回は、前例があったため、既存のソースコードをソフトを使ってコンバートする方法を実施しましたが
結局この3つ以外に方法はないのでは・・・。
- コンバージョンサービスを利用する
- 既存ソースをコンバートせずに1から作る
- Visual Studioを使用する
いいツールがあったら逆に知りたいくらいです。
まとめ
C#.NETに慣れすぎて、VB6のコードにいつまでも慣れないあまみやでした。
「On Error GoTo」とか「Resume Next」とかコンバート後は使えませんからね。
むしろ使わないで・・・。
参考リンク
その節は大変お世話になりました。
先人の知恵と記録には感謝しかありません。