次の方法で共有


ラップする

既存の Visual Basic 6.0 アプリケーションからの .NET Framework の呼び出し

Scott Swigart


この記事で取り上げる話題:

  • 既存コードのアップグレードに関する考慮事項
  • Visual Studio でのラッパーのセットアップ
  • ネットワーク接続ラッパーのサンプル
  • .NET Framework の FTP 機能の使用

この記事で使用する技術:

  • Visual Basic 6.0、Visual Basic 2005 Express、.NET Framework

サンプルコードのダウンロード: VBFusion05.exe (150KB)
翻訳元: Wrap It Up: Call Into The .NET Framework From Existing Visual Basic 6.0 Apps (英語)


目次

  1. 安くて簡単な方法
  2. .NET Framework の呼び出し
  3. ネットワークの接続性の通知
  4. 従来の操作を実行する新しい方法
  5. まとめ

多くの開発者の中では、Visual Basic 6.0 コードを作成している限り、Microsoft .NET Framework の巨大な世界には立ち入ることができないと考えられています。しかしこの記事で、そのような考えが真実でないことを証明します。Visual Basic 連携として知られる技法を使用して、Visual Basic 6.0 アプリケーションから、簡単に .NET Framework 2.0 を利用する方法を説明します。ここで提案する方法では、何らかのアプリケーションが、Visual Basic 6.0 のまま残ることになります。しかし、Visual Basic 2005 にアップグレードしない限り .NET Framework クラス ライブラリへの入り口は開かれない、と考える必要はありません。

ここで、単なるアップグレードをしない理由を考えてみましょう。アプリケーションを Visual Basic 6.0 から Visual Basic 2005 にアップグレードすることを選択した場合は、膨大なリソースが自由に使用できるようになります。Visual Studio には、Visual Basic 6.0 コードの大部分を自動的に書き換える移行支援機能があります。マイクロソフトは、アプリケーションのアップグレードにかかる時間、およびコストを判断するための評価ツールを含む、Visual Basic 6.0 から Visual Basic 2005 への移行ガイドを公開しています。Web には、個々のアップグレードの問題に関する記事、手順の説明、およびヒントなどがたくさんあります。また、これをテーマとする書籍もいくつかあります。多くのリソースが使用可能であるにも関わらず、なぜ Visual Basic 6.0 のコードを残さなければならないのかと疑問を抱くことでしょう。なぜ、単にすべてをアップグレードしないのでしょうか。

実は、コードを Visual Basic 6.0 から Visual Basic 2005 にアップグレードすることは、多大な労力を必要とするプロセスとなる可能性があり、この挑戦が成功するかどうかは、2 つの要素に大きく依存します。1 つはコードの品質、もう 1 つは、開発者の Visual Basic 2005 と .NET Framework に関する経験です。アーキテクチャが適切であり、モジュール化が徹底されているアプリケーションは、長年の間に複雑になったアプリケーションよりも簡単にアップグレードできます。

Visual Basic 6.0 では、何年も稼動し続けているアプリケーションが多く存在します。おそらく、このようなアプリケーションは、厳しいスケジュールで機能強化を繰り返してきたはずです。プログラム作業に関わった開発者は、数え切れないほど多く、その中には、自身が変更しているコードを完全に理解するだけの時間や手間をかけられなかった開発者がいたかもしれません。理由は何であれ、プログラマが、1 つのプロジェクトを稼動させ、次に進むことを迫られる状況は珍しくありません。その結果、時間がたつにつれてコードは複雑になってしまいます。あまりに複雑になったコードは、一般的に、アップグレードするよりも、再作成した方がうまく動きます。ただし、再作成のコストは安くはありません。また簡単でもありません。

開発者の経験の点では、複雑で、ミッションクリティカルな Visual Basic 6.0 アプリケーションをアップグレードする場合、Visual Basic 2005 での作業が高速に進むようになるまでが困難です。何らかのアップグレードを試みる前に、.NET での十分な経験を積んでおくことが重要です。これには、いくつかの理由があります。Visual Basic 6.0 アプリケーションを移行ウィザードに投入して処理を行った場合、結果として出力されるものは、簡単にはコンパイルも実行もできない Visual Basic 2005 アプリケーションです。移行ウィザードは、自動的に移行できなかった部分を示すコメントをコード全体に埋め込んできます。アプリケーションを修正し、実行できるようにするには、Visual Basic 2005、および .NET Framework に関する相当な理解が必要となります。必要となるコードの変更は、単純で退屈な作業から、アプリケーション サブシステム全体の書き換えに相当する作業までさまざまです。アップグレードが常に簡単であるとは限らないことは明らかです。

このようにアップグレードの困難な面を考えると、アップグレードをする人がいるのだろうかという疑問さえ浮かんできます。コード ベースの Visual Basic 2005 への移行は確かに簡単ではありませんが、.NET Framework 全体に摩擦なくアクセスできる方法があれば、それはすばらしい方法です。また、膨大な .NET Framework クラス ライブラリ、および Visual Studio 2005 の優れた生産性向上機能により、開発の生産性が上がることは既に明らかです。率直に言って、Visual Studio 2005 を知ると、Visual Studio 6.0 はまったくの手動式のように感じられます。アップグレードするかどうかは、アプリケーションごとにそれぞれ判断する必要があります。その作業に、それだけの価値がありますか。現時点で行うことが可能ですか。

ページのトップへ


1. 安くて簡単な方法

アップグレード以外の選択肢として、Visual Basic 6.0 アプリケーションを残し、必要に応じて、単に .NET Framework を呼び出す方法があります。.NET Framework には、最初から、さまざまなクラスが含まれています。IP アドレスを ping する、ネットワーク接続の変化を検出する、FTP でファイルを転送する、COM ポートにアクセスする、音声を再生する、物理メモリや画面解像度などのオペレーティング システム情報を取得する、ユーザーおよびドメイン情報を取得する、イベント ログの読み取りおよび書き込みを行う、パフォーマンス カウンタにアクセスする、サービスを開始および停止する、レジストリにアクセスするなどです。他にも多くのクラスがあります。.NET Framework 2.0 クラス ライブラリについて説明していると、すぐに "包括的" という言葉が頭に浮かんできます。.NET Framework 2.0 を使用することにより、サード パーティ製のコントロールに依存したり、多くの Win32 API を呼び出したりする必要がなくなります。.NET Framework を Visual Basic 6.0 から呼び出すことは、簡単であり、リスクも高くありません。これは、Visual Basic 2005 でのプログラミングで、作業を高速に進められるようになるための手段としても適しています。

.NET Framework を呼び出すには、この記事の後で説明しますが、Visual Studio 2005、または Visual Basic Express が必要となります。Visual Basic Express には、すべてのツールボックス コントロール、IntelliSense、デバッガ、および多くのプロジェクト項目が含まれています。Visual Basic 2005 を簡単に調査したり、試してみたりするには、これで十分です。また、Visual Basic Express は、使用期限が決まっている試用版ではありません。これは、Visual Studio の機能を制限したもので、この機能で十分であるアプリケーションを作成する限りは使用できるように設計されています。

特に Visual Basic Express を使用する場合は、この記事に付属のコードをダウンロードする必要もあります。ダウンロードに含まれている ComClass.zip ファイルを、\My Documents\Visual Studio 2005\Templates\ItemTemplates\Visual Basic フォルダにコピーしてください。このプロジェクト項目は、.NET Framework を Visual Basic 6.0 から呼び出すときに必要ですが、Visual Basic Express に既定では含まれていません。

ページのトップへ


2. .NET Framework の呼び出し

Visual Basic 6.0 では、COM オブジェクトを適切に呼び出すことができます。しかし、.NET Framework のクラスは、COM オブジェクトではないので、Visual Basic 6.0 から直接的に呼び出すことができません。.NET Framework クラスは、直接的にではなく、ラッパーを介して呼び出す必要があります。ラッパーは、COM クラス項目を使用して作成するので、他の COM オブジェクトと同じように動作します。ラッパーは、Visual Basic 6.0、Visual Basic Scripting Edition (VBScript)、Visual Basic for Applications (VBA)、または他の COM 対応の環境から呼び出すことができます。ラッパーの内部は、Visual Basic 2005 で作成するので、ラッパーからは、.NET Framework をシームレスに呼び出すことができます (図 1 を参照)。

図 1 Visual Basic 6.0 のための .NET ラッパー
図 1 Visual Basic 6.0 のための .NET ラッパー

ラッパーの作成は、本当に簡単な作業です。以下は、.NET Framework 2.0 の ping 機能のための COM 呼び出し可能ラッパーを作成する場合のステップです。

  1. Visual Studio 2005、または Visual Basic Express を起動します。
  2. 新しいクラス ライブラリ プロジェクトを、FX20Wrapper という名前で作成します。
  3. [プロジェクト] メニューを選択し、[新しい項目の追加] を選択します。
  4. [COM クラス] 項目テンプレートを選択します。名前を NetworkWrapper と入力して、[追加] をクリックします。
  5. NetworkWrapper クラスに次の関数を追加します。
Public Function Ping(ByVal hostNameOrAddress As String, _
        Optional ByVal timeout As Integer = -1)
    If timeout >= 0 Then
        Return My.Computer.Network.Ping(hostNameOrAddress, timeout)
    Else
        Return My.Computer.Network.Ping(hostNameOrAddress)
    End If
End Function

これで完了です。このわずかなコードで、既知の範囲のすべての IPv4 アドレスに ping することが可能な COM オブジェクトが作成されます。この関数では、ホスト名、または IP アドレスで ping することができます。また、オプションでタイムアウト値を指定することもできます。このような機能の可能性を考えてみてください。後は、[ビルド] メニューを使用して、Visual Basic Express プロジェクトをコンパイルすれば完成です。IDE により、プロジェクトがコンパイルされ、DLL が生成されます。この DLL は、Visual Studio が COM オブジェクトとして登録します。

次に、このラッパーを使用する Visual Basic 6.0 プロジェクトを作成します。

  1. Visual Basic 6.0 を起動し、新しい標準 EXE プロジェクトを作成します。

  2. 図 2 に示すようなユーザー インターフェイスを作成します。

    図 2 ping のテスト
    図 2 ping のテスト

  3. [プロジェクト] メニューで、[参照設定] を選択し、FX20Wrapper への参照を追加します。作成した .NET プロジェクトが、単に、他の COM オブジェクトと同じように表示されていることに注意してください。

  4. [Ping] ボタンのクリック イベントに、次のコードを追加します。

Private Sub Command1_Click()
    Dim network As FX20Wrapper.NetworkWrapper
    Set network = New FX20Wrapper.NetworkWrapper
    Text2 = Text2 & "Pinging " & Text1 & "..."
    DoEvents
    If network.ping(Text1) Then
        Text2 = Text2 & "Responded" & vbCrLf
    Else
        Text2 = Text2 & "Did not respond" & vbCrLf
    End If
End Sub
  1. アプリケーションを実行し、IP アドレスを入力し、[Ping] ボタンをクリックします。結果は、図 2 のように表示されます。

ページのトップへ


3. ネットワークの接続性の通知

アプリケーションでは、さらに、ネットワーク接続の予期しない変化に対応することが望まれます。たとえば、パソコンの線が抜かれることがあります。ユーザーが、無線の 1 つの接続拠点から別の拠点に移動することもあります。オペレーティング システムは、ネットワークの接続および切断を、毎回、ユーザーに通知します。オペレーティング システムが、作成したアプリケーションにも通知できるとしたらすばらしいことではありませんか。Visual Basic 2005 では、これが可能です。My.Computer.Network オブジェクトは、ネットワーク接続の状態が変化したときにイベントを発生させます。図 3 のコードは、NetworkWrapper クラスを拡張して、この通知機能を提供する方法を示しています。

図 3 ネットワークの可用性通知のラッパー

Public Event NetworkAvailabilityChanged(ByVal IsAvailable As Boolean)

Public Sub New()
    AddHandler My.Computer.Network.NetworkAvailabilityChanged, _
        AddressOf My_NetworkAvailabilityChanged
End Sub

Public ReadOnly Property IsAvailable() As Boolean
    Get
        Return My.Computer.Network.IsAvailable
    End Get
End Property

Private Sub My_NetworkAvailabilityChanged(ByVal sender As Object, _
      ByVal e As Microsoft.VisualBasic.Devices.NetworkAvailableEventArgs)
    RaiseEvent NetworkAvailabilityChanged(e.IsNetworkAvailable)
End Sub

New サブルーチンで (NetworkWrapper オブジェクトのコンストラクタ) で、My.Computer.Network が NetworkAvailabilityChanged イベントを提供していることに注意してください。このイベントは、COM で直接的に使用可能ではありません。代わりに、ラッパーの中の My_NetworkAvailabilityChanged サブルーチンで、このイベントをフックします。このルーチンから、COM で使用可能なイベントを発生させます。このルーチンは、独自に別の NetworkAvailabilityChanged イベントを発生させます。このイベントには、ネットワークの状態を示す単純な Boolean 値が含まれます。

Visual Basic 6.0 側で、このイベントを使用することは簡単であり、Button_Click を使用する場合と変わりありません。Visual Basic 6.0 アプリケーションのコードを、図 4 に示します。わずかなコードで、Visual Basic 6.0 アプリケーションが、すぐにネットワークの状態を認識できるようになります。このラッパーを実際のアプリケーションで実装すれば、ネットワークが使用可能でない場合に、ステータス バーで "オフライン" と通知したり、ネットワーク リソースにアクセスする機能を無効にしたりすることが可能になります。

図 4 NetworkAvailabilityChanged の使用

Dim WithEvents network As FX20Wrapper.NetworkWrapper

Private Sub network_NetworkAvailabilityChanged( _
        ByVal IsAvailable As Boolean)
    ShowAvailable IsAvailable
End Sub

Private Sub Form_Load()
    Set network = New FX20Wrapper.NetworkWrapper
    ShowAvailable network.IsAvailable
End Sub

Private Sub ShowAvailable(IsAvailable As Boolean)
    cmdUploadData.Enabled = IsAvailable
    StatusBar1.SimpleText = IIf(IsAvailable, "Online", "Offline")
End Sub

ページのトップへ


4. 従来の操作を実行する新しい方法

FTP の最初の RFC は、1973 年に公開されました。それ以来、FTP は、インターネット上でファイルを転送する際に最もよく使用されるプロトコルの 1 つとなっています。マイクロソフトは、これまで Microsoft Internet Transfer Control、および WinInet API によって FTP のプログラムのサポートを提供してきました。しかし、.NET Framework の一部としての FTP のネイティブ サポートは、最近まで実現されていませんでした。.NET Framework 2.0 では、WebClient、FtpWebRequest、および FtpWebResponse のクラスによる FTP のサポートが追加されています。これらのクラスから、さまざまな FTP の操作を実行できます。図 5 に示すように、個々の操作と、それらに対応する FTP コマンドは、WebRequestMethods.Ftp のメンバによって記述されています。

図 5 WebRequestMethods.Ftp のメンバ

名前 説明
AppendFile FTP APPE プロトコル メソッドを表します。FTP サーバー上の既存ファイルにファイルを付加するために使用されます。
DeleteFile FTP DELE プロトコル メソッドを表します。FTP サーバー上のファイルを削除するために使用されます。
DownloadFile FTP RETR プロトコル メソッドを表します。FTP サーバーからファイルをダウンロードするために使用されます。
GetFileSize FTP SIZE プロトコル メソッドを表します。FTP サーバー上のファイルのサイズを取得するために使用されます。
ListDirectory FTP NLIST プロトコル メソッドを表します。FTP サーバー上のファイルの一覧を省略形式で取得します。
ListDirectoryDetails FTP LIST プロトコル メソッドを表します。FTP サーバー上のファイルの一覧を詳細も含めた形式で取得します。
MakeDirectory FTP MKD プロトコル メソッドを表します。FTP サーバー上にディレクトリを作成します。
PrintWorkingDirectory FTP PWD プロトコル メソッドを表します。現在の作業ディレクトリの名前を出力します。
RemoveDirectory FTP RMD プロトコル メソッドを表します。ディレクトリを除去します。
Rename FTP RENAME プロトコル メソッドを表します。ディレクトリを名前変更します。
UploadFile FTP STOR プロトコル メソッドを表します。FTP サーバーにファイルをアップロードします。
UploadFileWithUniqueName FTP STOU プロトコル メソッドを表します。FTP サーバーに一意な名前でファイルをアップロードします。

ファイルのダウンロードにかかる時間は、一様ではなく、ファイルのサイズ、およびネットワークの大域幅に影響されます。これに対応するため、FTP クラスでは、同期、および非同期の両方の操作をサポートします。プログラムは、同期操作の方が単純です。次のように、Visual Basic 2005 の 2 行のコードのみでダウンロードができます。

Dim w As New WebClient
w.DownloadFile(address, fileName)

しかし、同期アプリケーションは、ダウンロード操作が完了するまでブロックされます (停止しているように見えます)。この動作は、コマンド行、またはバッチの操作では問題ありませんが、ほとんどのユーザーは、どれくらいで動き始めるかを通知せずに停止してしまうようなアプリケーションの動きをあまり歓迎しません。FTP 非同期操作は、ダウンロードを別のスレッドで実行し、進行状況、およびダウンロードの完了を通知するイベントを発生させます。図 6 に、同期、および非同期の両方の操作を提供する FTP のクラスのラッパーを示します。

図 6 FTP 機能のラッパー

Imports System.Net

<ComClass(FTPWrapper.ClassId, FTPWrapper.InterfaceId, _
    FTPWrapper.EventsId)> 
Public Class FTPWrapper

#Region "COM GUIDs"
‘ この GUID は、このクラス、およびその COM インターフェイスの
‘ COM の ID を提供します。これらを変更すると、
‘ 既存のクライアントがクラスにアクセスできなくなります。
Public Const ClassId As String = "a9afe450-c10e-47cd-a004-f42dc975caaf"
Public Const InterfaceId As String = _
    "ec30e4cf-877c-4947-a093-715c2002aea0"
Public Const EventsId As String = "ddffd280-bff9-40dd-9238-215232b90b11"
#End Region

Dim WithEvents w As New WebClient
Dim totalBytes As Integer

Public Event DownloadProgressChanged( _
    ByVal bytesDownloaded As Integer, _
    ByVal totalBytes As Integer)

Public Event DownloadFileCompleted()

Public Sub New()
    MyBase.New()
End Sub

Public ReadOnly Property IsBusy() As Boolean
    Get
        Return w.IsBusy
    End Get
End Property

Public Sub DownloadFile(ByVal address As String, ByVal fileName As String)
    w.DownloadFile(address, fileName)
End Sub

Public Sub DownloadFileAsync( _
    ByVal address As String, _
    ByVal fileName As String)

    If w.IsBusy Then
        Throw New ApplicationException( _
          "FTPWrapper has not completed the previous operation. " & _
          "One operation must complete before another can be initiated.")
    Else
        Dim f As FtpWebRequest = _
            CType(WebRequest.Create(address), FtpWebRequest)
        f.Method = WebRequestMethods.Ftp.GetFileSize
        Using response As FtpWebResponse = _
                CType(f.GetResponse(), FtpWebResponse)
            totalBytes = response.ContentLength
        End Using 
        w.DownloadFileAsync(New System.Uri(address), "c:\readme.txt")
    End If
End Sub

Private Sub w_DownloadFileCompleted(ByVal sender As Object, _
      ByVal e As System.ComponentModel.AsyncCompletedEventArgs) _
      Handles w.DownloadFileCompleted
    RaiseEvent DownloadFileCompleted()
End Sub

Private Sub w_DownloadProgressChanged(ByVal sender As Object, _
      ByVal e As System.Net.DownloadProgressChangedEventArgs) _
      Handles w.DownloadProgressChanged
    RaiseEvent DownloadProgressChanged(e.BytesReceived, totalBytes)
End Sub

End Class

FTPWrapper クラスは、これまで説明してきた概念に基づいています。まず、このクラスは、ComClass プロジェクト項目テンプレートを使用して作成されています。これにより、FTPWrapper には、COM オブジェクトとしての登録に必要な GUID が必ず含まれます。WebClient のインスタンスは、クラスのレベルで、WithEvents を付けて宣言します。これで、クラス内のすべてのメソッドが、この単一のインスタンスにアクセスできるようになります。また、FTPWrapper クラスが WebClient の DownloadProgressChanged イベント、および DownloadFileCompleted イベントを処理できるようになります。

DownloadFile サブルーチンは、1 行のコードを含み、特定ファイルの同期ダウンロードを実行します。前に説明したように、このサブルーチンを呼び出した場合、アプリケーションは、ファイルのダウンロード中、停止しているようになります。

ファイルをダウンロードする方法としては、DownloadFileAsync の方が、より用途が広く、注目される方法です。このサブルーチンでは、最初に、進行中の非同期操作が他に存在しないことを確認します。存在する場合は、サブルーチンが例外をスローします。これは、Err.Raise に相当する Visual Basic 2005 の機能です。次に、DownloadFileAsync は、FtpWebRequest クラスを使用して SIZE FTP コマンドを実行します。このコマンドは、要求したファイルのサイズをバイト単位で戻します。ファイル サイズは、ダウンロードの進行状況を正確に示すために必要です。最後に、WebClient の DownloadFileAsync 関数が呼び出されます。この関数は、ファイルをダウンロードするプロセスをバックグラウンドで開始し、さらに、定期的な DownloadProgressChanged イベントの発生も開始します。

WebClient の DownloadProgressChanged イベントは、COM で直接的に使用可能ではないため、このイベントもラップします。DownloadProgressChanged のハンドラは、単純に、ダウンロードされたバイト、および総ファイル サイズを引数として渡す別のイベントを発生させます。このイベントは、Visual Basic 6.0 で簡単に使用可能です。同様に、DownloadFileCompleted イベントもラップし、Visual Basic 6.0 で使用できるようにします。

ラッパーの最終的な目的は、.NET Framework クラスが、簡単に使用可能なプロパティ、メソッド、およびイベントを備えた、通常の COM オブジェクトとして認識されるようにすることです。FTPWrapper は、この目的を実現しています。図 7 に、FTP を使用してファイルをダウンロードするために必要な Visual Basic 6.0 のコードを示します。

図 7 ファイルのダウンロード

Dim WithEvents ftp As FX20Wrapper.FTPWrapper

Private Sub btnDownload_Click()
    lblProgress.Visible = True
    prgProgress.Visible = True
    Command1.Enabled = False
    ftp.DownloadFileAsync txtAddress.Text, txtFileName.Text
End Sub

Private Sub Form_Load()
    Set ftp = New FX20Wrapper.FTPWrapper
End Sub

Private Sub ftp_DownloadFileCompleted()
    lblProgress.Visible = False
    prgProgress.Visible = False
    Command1.Enabled = True
End Sub

Private Sub ftp_DownloadProgressChanged(ByVal bytesDownloaded As Long, _
        ByVal totalBytes As Long)
    prgProgress.Max = totalBytes
    prgProgress.Value = bytesDownloaded
End Sub

ダウンロードを開始するには、単純に、FTPWrapper クラスを宣言し、DownloadFile サブルーチン、または DownloadFileAsync サブルーチンを呼び出します。DownloadFileAsync を呼び出した場合は、FTPWrapper で、ダウンロードの進行中に DownloadProgressChanged イベントが発生します。また、ダウンロードが完了したときは、DownloadFileCompleted イベントが発生します。DownloadProgressChanged イベントは、そのときまでにダウンロードされたバイト数、および総ファイル サイズを受け取ります。この情報があれば、ダウンロードの進行状況を示すことができます。図 8 は、ダウンロード中の Visual Basic 6.0 FTP クライアントです。

図 8 Visual Basic 6.0 で実装された FTP クライアント
図 8 Visual Basic 6.0 で実装された FTP クライアント

この記事に付属のダウンロード用のコードには、この記事で説明したラッパー クラス、およびサンプル アプリケーションが含まれています。このサンプルを試すには、コードをダウンロードし、含まれている install.bat ファイルを実行してください。これにより、ラッパー クラスが COM オブジェクトとして登録されます。これで、Visual Basic 6.0 のサンプルが実行できます。

ページのトップへ


5. まとめ

Visual Basic 6.0 は、第 2 の COBOL となりつつあります。どちらの言語に対しても、悪意からこのように述べているわけではありません。COBOL は、ミッションクリティカルなメインフレーム アプリケーションを作成するために使用する言語として確立され、大きな成功を収めました。シック クライアント、および GUI の世界では、Visual Basic が同様の地位を築き、さまざまなビジネス シナリオにおいて最適な言語となっていました。

主流となったビジネス プログラミング言語の中で、完全に消滅したものとして思い浮かぶ言語はありません。現在も、何万行もの COBOL が存在し、当面はそれが存在し続けるでしょう。同様に、Visual Basic 6.0 も、これから先の何年か対応し続ける必要があります。実際、マイクロソフトは、Windows Vista の Visual Basic 6.0 ランタイムを出荷することを予定しています。また、Windows Vista では、Visual Basic 6.0 アプリケーションが確実に稼動し続けるように連携して動作する Visual Basic 6.0 互換スイートが実行される予定です。

では、このようなレガシ コードに行うべきことはいったい何でしょうか。コードのすべての行を Visual Basic 2005 に書き換えることが現実的でないことは明らかです。最終的にはコードのほとんどを移行するとしても、時間、およびリスクから考えて、現時点では移行できないアプリケーションもあります。さまざまな制約から、多くのアプリケーションは、Visual Basic 6.0 ランタイムで稼動し続けるほかありません。このようなアプリケーションでも、.NET Framework、およびそれがもたらす生産性向上の利益を享受することができます。

ここでは、.NET Framework のごく一部のネットワーク クラスを、Visual Basic 6.0 で簡単に使用できるように、ラップして COM オブジェクトとして提供できることを説明しました。実際には、この方法で、.NET Framework のいずれの部分も、ラップし、提供することが可能です。.NET Framework は、何千ものクラスによる、マイクロソフトから用意された贈り物と考えることができます。後は、自分でラッピングさえすれば、完全な贈り物として提供することができます。

ページのトップへ


Scott Swigart は、新生技術や融合技術に関するコンサルタント、執筆活動、および講演に多くの時間を費やしています。Scott は、.NET、マイクロソフト認定トレーナー (MCT)、およびデベロッパー (MCSD) についての書籍も何冊か執筆しており、Microsoft MVP でもあります。Scott の連絡先は、scott@swigartconsulting.com です。


この記事は、MSDN マガジン - 2006 年 5 月からの翻訳です。

QJ: 060504

ページのトップへ