Q 質問 Visual Studio .NETが2002年第1四半期に登場する予定ですが,Visual Basicの旧バージョンで開発したアプリケーションはVisual Basic .NETで動作するのでしょうか。

A 回答 実行環境やクラス・ライブラリが変わるので基本的に互換性はありません


図●Visual Basic 6.0とVisual Basic .NETの互換性
Visual Basic .NET(VB .NET)では実行環境が大きく変わるため,バイナリ・レベルでもソース・コード・レベルでも互換性はない。ただし,VB 6.0の場合はVisual Basic アップグレード ウィザードと呼ぶ移行ツールを利用してソース・コードをVB .NET用に自動変換することが可能
 2002年第1四半期に提供予定のVisual Studio 6.0の次期版Visual Studio .NETでは,これまでの開発・実行環境が一新されます。中間コードとJIT(Just-In-Time)コンパイラを利用した「Common Language Runtime(CLR)」と呼ぶ新しい実行環境が導入され,クラス・ライブラリも従来のMFC(Microsoft Foundation Class)やVB Object Libraryから.NET Frameworkに変わります。

 そのため,Visual Studio .NETに含まれるVisual Basic(VB)6.0の次期版Visual Basic .NETとVisual Basicの旧バージョンとでは基本的に互換性はありません([拡大表示])。

VB 6.0向けに移行ツールを提供

 互換性を考える場合,バイナリ・レベルとソース・コード・レベルの両方があります。まずバイナリ・レベルの場合,互換性はありませんが,COMコンポーネントの場合はRCW(Runtime Callable Wrapper)と呼ぶラッパー機能を利用して.NET Frameworkで開発したアプリケーションから呼び出すことは可能です。また,その逆も可能です。CCW(COM Callable Wrapper)と呼ぶ機能を利用すればVBのアプリケーションから.NET Frameworkで開発したアプリケーションをCOMコンポーネントとして呼び出すことが可能です。

 一方,ソース・コード・レベルの場合でも互換性はありませんが,VB 6.0向けにVisual Basic アップグレード ウィザードと呼ぶ移行ツールを提供します。VB 6.0以前のアプリケーションはサポートしませんが,このツールを利用すればVB 6.0のプロジェクト・ファイルをVB .NET用に自動的に変換することが可能です。

 具体的には,以下のような手順になります。まず,VB 6.0のプロジェクト・ファイルをVB .NETで開くとVisual Basic アップグレード ウィザードが自動的に起動します(写真[拡大表示])。画面の指示に従ってマウスをクリックすれば,VB 6.0のソース・コードをVB .NET用に自動変換します。例えば,VB.NETではVB 6.0のバリアント型はオブジェクト型に変更されるため,「Dim x As Variant」というコードは「Dim x As Object」に変換されます。

 アップグレード ウィザードが実施するコード変換の主な内容は,マイクロソフトが公開しているドキュメント「Visual Basic 6.0からVisual Studio .NETへの移行」(http://www.microsoft.com/japan/developer/vstudio/nextgen/technology/vbupgrade.asp)に詳細があります。

完全に変換できるとは限らない

写真●Visual Basic アップグレード ウィザード
VB 6.0のソース・コードを自動的にVB .NET用に変換するほか,変換結果をHTMLのレポートとして自動生成する。上記はVisual Studio .NET ベータ2 日本語版でVisual Basic 6.0のサンプル・アプリケーション(ALARM.vbp)を変換させたもの
 ただし,アップグレード ウィザードを利用しても,すべての個所が完全に変換されるわけではありません。マイクロソフトの検証結果ではコードの約95%を自動的に変換できるとしていますが,中にはAcitveXドキュメントのように変換できないものもあります。「そのような機能を利用している部分は新規に作成し直した方が早い場合がある」(同社)としています。

 また前述のバリアント型からオブジェクト型のような単純な変更であればツールで対応できますが,コードの変換が必要かどうか判断できないケース,変更が必要でも自動変換できないケースがあります。その場合は変更すべき,あるいは変更が必要になるかもしれないので注意すべき個所にコメントが挿入されるようになっています。例えば「On MyVariable GoTo 100,200,300 」というコードがあった場合は,そのコードに「UPGRADE_ISSUE On MyVariable GoTo はアップグレードされませんでした」というコメントが追加されます。このケースではSelect文を使うなどしてコードを自分で修正する必要があります。

 このようにアップグレード ウィザードを利用しても,コードを修正する必要が出てきます。コードを修正する場合は,その部分だけを変更すればいいのか,その修正が他のコードに影響を与えないか,までを検証する必要があり,かなり大変な作業になります。そのため,アップグレード ウィザードはVB .NETに移行するために変更すべき個所を指摘してくれるツールととらえた方が良いでしょう。

 アップグレード ウィザードはコードの変換結果をHTML形式のレポート(_UpgradeReport.htm)として出力するほか,変更が必要な個所には関連するドキュメントへのリンクも付加してくれます(写真の右)。これらの情報を頼りに地道に変更していくしかありません。

 なお,VB .NETベータ2では,ベータ1で一度変更した言語仕様をVB 6.0と同じ仕様に戻すように変更されました。具体的には,(1)Boolean値のTrueの解釈,(2)AND,OR,XOR,NOTの論理演算子,(3)配列を作成する際に指定する数値の解釈の3つで,最終的な製品版でもこのような変更がまた生じる可能性があります。

(本誌)