koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

Visual Basic のプログラムを C# に移植してる感想

Visual Basicは.NETではないやつ。

具体的にはVB5から.NET5 Windows Forms。奇しくも同じ5。

趣味でやっている(完遂しなくてもいい)のでめちゃくちゃ場当たり的だし、仕事で今後やることもないだろうから完全な感想。

移植をこんな風に試してる人がいますよ。といった記事。

動機・やってること

SRC -Simulation RPG Construction-というスーパーロボット大戦ライクなSRPGを作って遊べるVBで作られているフリーソフトがある。

これには有志が色んな版権作品のデータを投稿していて、今でもたまにそのデータを眺めて楽しんでいる。

データはテキスト形式なのでどうにでも眺められるのだれど、スマホでサッと見られるビューワーがあると眺めやすいかな? と思ってデータを読む部分だけでも移植してみることにした。

↓でやっていて、

github.com

ビューワー(この記事の時点では大分半端だし完成する気もしない)はとりあえずGitHub Pagesに置いてある。

SRC#DataViewer

やり方

作業環境はWindows10。ググると事例が出てくるのでその通りにすればいい。

ざっくり以下のような流れになる。

  1. VB6のランタイムとVisual Basic Express Edition 2008をインストールする
  2. VBEx2008でVBのプロジェクトを開いてVB.NETにコンバートする
  3. VB.NETにコンバートしたプロジェクトをC#にコンバートする
  4. コンバートやコンパイルのエラーがあるので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なことはないと思うけれど、もしそうなりそうなら気をつけられたし。

今回は必要な機能だけ雑に手で実装してる。

今のところの感想は以上です。

*1:VBの配列は範囲の下限と上限を指定できる。その下限が元は2だったということ