ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

VB6からVS2013へのマイグレーションで注意すること

f:id:shinsuke789:20141128121500j:plain

マイグレーション時に遭遇した問題を覚えている範囲で書きました。

マイグレーション後に使えなくなる機能

REXEC

Socketクラスでrexecの仕組みを作成する必要があります。

Shell関数

TcpClinet?等を使ってTelnetを行う形などへ書き換えが必要です。

LenB関数

VB.NETでは存在しません。独自で用意する必要があります。

Oracle OO4O

ODP.NETへの書き換えが必要です。

PictureBox

ほどんとの機能が使えないので書き換える必要があります。
Microsoft公式サイトに互換表がありますが、サンプルがないので置き換えができません。

VB6とVB.NETで座標の単位が変わっています。
VB.NETでは単位がピクセルなので、単位変換等が不要でそのままの数値が使えます。

DDE

VB.NETには存在しません。
別途DDEライブラリを使用すれば使えます。

固定長文字列配列

VB.NETではサポートされていませんので書き換えが必要です。

VB6にしかない定数

VB.NETに対応しているものがあればそれに置換し、それ以外の場合修正が必要です。

Printer関連

コードアップグレードではエラー・警告が一切でないですが、印刷に関しては全く動きません。
VB.NETから仕組みが全く違うので全て書き換えるが必要です。

修正が必要になってくる機能

OnErrorGoTo?のエラー処理

基本的にVB.NETでも動作しますが、エラー発生時の詳細が取得できないので、どのクラスの何行目でどういったエラーが発生しているかがわかりません。
そのためTry-Catch-Finallyに書き換える必要が出てきます。

FormのActivatedイベント

VB.NETからVB以外の他のプログラムからの切替時にもイベントが動作するようになりました。
そのため、イベント発生回数が増え画面がちらついたり、意図しない動きが発生します。
なるべく使わないように修正する必要があります。

VB6.GetItemString

リストから文字を取得する関数ですが、.NETで使うとかなりパフォーマンスが悪くなります。
ListBox?.Items(index)の形に書き換える必要があります。
あるシステムで関係する部分を書き換えると、処理時間が2分→1秒未満になりました。

VB6系の関数

VB6系の関数は、パフォーマンスが悪いものが多いので、可能な限り.NETの仕組みに書き換えるようにしましょう。

見積り

見積の段階でアップグレードマイグレーションを行い、コンパイルエラーの確認、上記の事項がどれくらいあるのか確認しておきます。

マイグレーション作業は、実際にやってみないと隠れた作業がわかりません。

見積として出す時間は、多めに見ておいた方が良いでしょう。

実際、動作確認の段階で予期せぬ対応がでてきたので、余計に時間がかかったりしました。