外部ライブラリとの作業は、Visual Basicの機能を拡張し、標準クラスだけでなく、サードパーティのコンポーネント(.NETライブラリや古典的なCOMオブジェクト)を使用できるようにします。
もともとVBは主にCOMコンポーネント(ActiveX、OCX)との相互作用を目指して設計されており、これらのライブラリは「Project – References」を介して接続できます。VB.NETが登場してからは、.NETアセンブリへの参照を指定し、P/Invoke(Declare)を介して外部メソッドをより便利に使用することができるようになりました。
主な難しさは、統合方法を賢く選択する必要があることです。そうしないと、実行時エラー、互換性の問題、リソースリークが発生する可能性があります。
.NETでは、.NETライブラリや登録済みCOMコンポーネントを使用するために_Add Reference_を利用し、これはアセンブリへの参照を追加します。ネイティブDLLからの手続きを呼び出すためには_Declare_を使用します。
.NETライブラリを使用する例(Add Reference):
' .NET参照を追加した後 Imports System.IO Dim reader As New StreamReader("file.txt") Dim line As String = reader.ReadLine() reader.Close()
WinAPIから関数を呼び出す例(Declare):
' user32.dll(WinAPI)から関数を呼び出す Declare Function MessageBeep Lib "user32" (ByVal wType As Integer) As Boolean Sub TestBeep() MessageBeep(0) End Sub
主な特徴:
Imports構文を使用して外部DLLの関数をロードできますか?
いいえ、Importsステートメントは接続されたアセンブリ内の名前空間へのアクセスを容易にするだけで、ネイティブDLLからの動的な関数の接続には使用できません。
VB.NETでAdd Referenceを介して使用するために.NETアセンブリを登録する必要がありますか?
いいえ、.NETライブラリは単純に参照を追加することで接続でき、COMライブラリのみがregsvr32を通じて登録を必要とします。
Declareを通じて.NETメソッドを接続できますか?それともネイティブのWin32関数のみですか?
いいえ、Declareは通常の(.NETではない)DLLからエクスポートされるstdcall/FARPROC関数のみを対象にしています。.NET関数はAdd Reference/Importsを介して呼び出されます。
開発者はサードパーティの.NETライブラリをDeclareを通じて使用しようとしましたが、ドキュメントを読まずにコンパイルエラーを引き起こしました。
利点:
欠点:
Add Referenceを介して正しく.NET参照を追加し、その後Importsを使用して必要なクラスのインスタンスを作成。
利点:
欠点: