2016年5月4日水曜日

VB6からVB.NETに移行する(3)

これまで、前回までに書いた方針で進めてきましたが、いくつか実際上は問題があったので、備忘録がてら書いておきます。

1.VB6のOCXが継承される
Visual Studioの自動アップグレードを使いました。標準コントロールとかが、VB.NET用に更新されると思っていましたが、一部?はそうでないようです。
例えば、MSComctl2.dllは、AxInterop.MSCOMctl2.dllという具合に、VB.NETで使用可能なように既存のOCXがラッピングされて提供されます。
Chapter 14: Interop Between Visual Basic 6.0 and Visual Basic .NET
Introduction to COM Interop (Visual Basic)
Converting VB6 application Vb.Net using Interop

ここは盲点でした。
ただ、実際上は継続して使用できるので、順次コントロールを置き換えていけばよい話なので、一から再構築するよりかは遥かに単純作業です。参照を外せば、どこで利用しているかもわかりますし。

2.RDOが使えない
もう1つの盲点はデータベースアクセス関係、特にRDOでした。
こちらには、こんな問題が。
[VB2005]Windows7環境でのRDO接続について
[INFO] You need a runtime license for RDO and for ActiveX controls when running on a computer on which VB6 isn’t installed
VB6.0 のライセンスの問題を修正する VB6CLI.EXE(VB6.0)

要するに、RDO接続は、VSインストールされた端末以外での使用はライセンスの問題があり、かつ、実際に動かない、ということです。これらは全てADO等に置換する必要があります。
これはDBGrid等、従来のOCXでDBアクセスしているものも同様でした。

これって、開発環境では気づかないので、結構厄介で、実際、本番のクライアント環境にて発覚しました。
事前の調査不足を反省しつつ、力仕事で置き換えました。

3.APIの読込み
VB以外の、DLL等で提供されているAPIを読み込む際、VB6ではString型やInteger型で十分でしたが、VB.NETではSystem.Text.StringBuilderやSystem.UIntPtrで定義し直さないとうまく連携しませんでした。つまり、既存のVB6コードはString型なので、どこかで型変換が必要。

Dim oldstr As String

 newstr = New System.Text.StringBuilder(oldstr)


みたいな。

この辺りが今回のLessons Learnedでしょうか。

0 件のコメント:

コメントを投稿