2015年10月11日日曜日

VB6からVB.NETへ移行する(1)

VB6とOCX、Visual Studio 2005が入っている環境を入手したので、そこでVB6からVB.NETに、無謀にもアップグレードウィザードを使って移行にチャレンジ。今回は、どのような問題が出るか、の抽出が目的です。

まずはOCXを使ってなさそうな小さなアプリケーションから試してみます。今回は無事変換完了。

Visual Studio上では11個のエラーと7個の警告。まずまずの数字です。
出力先に、アップグレードレポートファイルが生成されていたのでこちらも確認。こちらでは、コンパイルエラーが11個、デザインエラーが118個、警告が82個。
両方ともエラーが11個で一致しているように見えますが、詳細を見るとエラー内容が異なります。

Visual Studio上のエラーは、大別すると次の通り。
  • AxMSRDCのメンバーではない
  • System.Windows.Forms.Labelのメンバーではない
  • Meを代入式のターゲットにすることはできない
  • LenB/MidBは宣言されていない
  • vbFromUnicodeは宣言されていない

他方、 アップグレードレポートファイル上のエラーは、大別すると次の3パターン。
  • 一部の定数はアップグレードされませんでした(vbFromUnicode)
  • 一部の関数がサポートされていません(LenB/MidB)
  • マウスのカーソルをカスタムポインターに設定できません

とりあえずコンパイルできるようにするには Visual Studio上のエラーを潰す必要がありますが、アップグレードレポートファイルの方が本当に修正していくには参照するのに都合がよさそうです。

まずは両方に共通しているLenB/MidBについて調査。
VB6のLenBと同じ事を行うには?
文字列の一部をバイト単位で取り出す (LeftB, MidB, RightB)
VB.NET LeftBの代用

いろいろと皆さんの対処方法があるようです。とりあえず、このあたりは共通クラスを作ってその中に入れるようにします。

続いて、共通しているvbFromUnicodeです。
こちらも共通関数化してしまいます。
Equalivent of VB6's vbUnicode in NET?
[RESOLVED] [2003]vbFromUnicode Equivalent

後は、Set Me = Nothingについてですが、これはとりあえずコメントアウトすることに。
'Set Object = Nothing'... do you still do this in VB.net????
Question : Do you still use 'Set Object = Nothing' in VB.NET?


今日のところはここまで。



0 件のコメント:

コメントを投稿