Visual Basicは.NETではないやつ。
具体的にはVB5から.NET5 Windows Forms。奇しくも同じ5。
趣味でやっている(完遂しなくてもいい)のでめちゃくちゃ場当たり的だし、仕事で今後やることもないだろうから完全な感想。
移植をこんな風に試してる人がいますよ。といった記事。
動機・やってること
SRC -Simulation RPG Construction-というスーパーロボット大戦ライクなSRPGを作って遊べるVBで作られているフリーソフトがある。
これには有志が色んな版権作品のデータを投稿していて、今でもたまにそのデータを眺めて楽しんでいる。
データはテキスト形式なのでどうにでも眺められるのだれど、スマホでサッと見られるビューワーがあると眺めやすいかな? と思ってデータを読む部分だけでも移植してみることにした。
↓でやっていて、
ビューワー(この記事の時点では大分半端だし完成する気もしない)はとりあえずGitHub Pagesに置いてある。
やり方
作業環境はWindows10。ググると事例が出てくるのでその通りにすればいい。
ざっくり以下のような流れになる。
- VB6のランタイムとVisual Basic Express Edition 2008をインストールする
- 特に参考になった記事 VB6のソースをVisualStudio2019対応にする方法 - Qiita
- VBEx2008でVBのプロジェクトを開いてVB.NETにコンバートする
- VB.NETにコンバートしたプロジェクトをC#にコンバートする
- VB.NET -> C# 変換ツールはいくつかあるので好きなのを選べばいい
- 使ったやつ Code Converter (VB - C#) - Visual Studio Marketplace
- コンバートやコンパイルのエラーがあるので1つずつそれを解消する
ラッキーポイント
結構普通にコンバートできる。Formも結構レイアウトやイベントを保ったものができてびっくりした。
丁寧にエラー対応していけば普通に移植できる感じがした。
VBのソースコードを抱えていて今後も動かしたい人はVBEx2008がダウンロードできるうちに変換だけでもしておくとよいのではなかろうか。
困りポイント
オフセット
とにかく配列などのオフセットが0ではないのが厳しい。
// UPGRADE_WARNING: 配列 strArgs の下限が 2 から 0 に変更されました。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="0F1C9BE1-AF9D-476E-83B1-17D43BECFF20"' をクリックしてください。
のような無情な警告が添えられている*1。
気分で適当に動くように直しているけれど、大きいプロジェクトを手堅く移植するならVB互換の配列クラスを作るなどして同じ振る舞いを得られるようにするのがよさそうと思った。
追記:2021-03-18
結局二次元配列はラッパークラスを作った。
SRC/D2Array.cs at master · 7474/SRC · GitHub
一次元の配列も初っ端からラッパーを作ってそれに置き換えた方がよかったかも。
Microsoft.VisualBasic
.NETではVB固有の言語機能はMicrosoft.VisualBasic名前空間にあるライブラリでサポートされている。今回はBlazorでも動かしたかったこともありGUI以外は.NET Standardをターゲットしていたのだけれど、.NET StandardではMicrosoft.VisualBasicはサポートされていない。
多分移植ターゲットが.NET Standardなことはないと思うけれど、もしそうなりそうなら気をつけられたし。
今回は必要な機能だけ雑に手で実装してる。
今のところの感想は以上です。