Visual Basic 6.0 から Visual Basic .NET または Visual Basic 2005 アセンブリを呼び出す方法

文書翻訳 文書翻訳
文書番号: 817248 - 対象製品
すべて展開する | すべて折りたたむ

目次

はじめに

この資料では、Microsoft Visual Basic .NET または Microsoft Visual Basic 2005 を使用して、Microsoft Visual Basic 6.0 からの呼び出しが可能なマネージ アセンブリをビルドする方法について説明します。

詳細

COM への .NET 型の公開に関するガイドライン

Microsoft .NET アセンブリの型を Component Object Model (COM) アプリケーションに公開する場合は、設計時に、以下の COM 相互運用機能の要件を考慮してください。次のガイドラインに従うことにより、マネージ型 (クラス、インターフェイス、構造体、列挙型など) と COM クライアント アプリケーションとの連携が効率よく行われます。
  • インターフェイスを定義し、それらを明示的にクラスに実装します。COM 相互運用機能が提供するしくみにより、クラスのすべてのメンバとその基本クラスのメンバを含むインターフェイスは自動的に生成されますが、明示的なインターフェイスを提供し、それらを明示的に実装することを推奨します。
  • COM に公開するマネージ型はすべて、パブリックとして宣言します。アセンブリ中のパブリック型のみがタイプ ライブラリに登録され、エクスポートされます。したがって、COM コンポーネントから参照できるのはパブリック型のみです。
  • COM に公開するすべての型のメンバ (メソッド、プロパティ、フィールド、およびイベント) をパブリックとして宣言します。パブリック型のメンバはそれ自体がパブリックである場合に限り、COM コンポーネントから参照可能です。デフォルトでは、パブリックの型とメンバはすべて、COM から参照できます。型やメンバを COM クライアント アプリケーションから参照不可にする場合や、参照範囲を制御する場合は、ComVisibleAttribute 属性を使用します。
  • COM で型からインスタンスを作成するには、パブリックのデフォルト コンストラクタが必要です。パブリックのマネージ型は COM から参照できます。ただし、パブリックのデフォルト コンストラクタ (引数のないコンストラクタ) がない場合、COM クライアントは型のインスタンスを作成できません。ただし、型から別の方法でインスタンスが作成されていて、インスタンスが COM クライアントに返されていれば、COM クライアントはその型を使用できます。これらの型には、さまざまな引数を指定できるオーバーロードされたコンストラクタを含めることができます。ただし、引数を指定できるコンストラクタは、マネージ (.NET) コード以外では呼び出せない場合があります。
  • 型を抽象型にすることはできません。COM クライアントと .NET クライアントのいずれも、抽象型のインスタンスを作成することはできません。
  • Visual Basic .NET または Visual Basic 2005 では COMClass テンプレートを使用します。COM アプリケーションに公開する予定の新しいクラスを追加するときは、Visual Basic .NET または Visual Basic 2005 で提供される COMClass テンプレートの使用を検討してください。COMClass テンプレートにより、COMClassAttribute 属性を含むクラスが作成されます。また、追加する型により公開される CLSID、インターフェイス ID、およびイベント ID の GUID が生成されます。その他に、パラメータのないパブリック コンストラクタも作成されます。これは、COM で呼び出し可能な型を作成するガイドラインに従った、最も簡単な新しいクラスの作成方法です。

COM 相互運用機能に必要な .NET アセンブリの登録とタイプ ライブラリの作成

Visual Basic 6.0 が正しくマネージ コンポーネントと連携するためには、COM 相互運用機能に必要なアセンブリを登録して、タイプ ライブラリを作成する必要があります。アセンブリの登録は、COM クライアント アプリケーションがアセンブリと連携するコンピュータごとに実行する必要があります。タイプ ライブラリは、アセンブリ内で公開された型の型情報を COM クライアント アプリケーションに提供します。これを行うための処理は、作業しているコンピュータが開発用であるか、アプリケーションを利用するコンピュータであるかにより異なります。

開発用コンピュータの場合は、Microsoft Visual Studio .NET または Microsoft Visual Studio 2005 プロジェクトの [構成プロパティ] で [COM の相互運用機能に登録] チェック ボックスをオンにすると、ビルド処理中に自動的にタイプ ライブラリが作成され、登録されます。クラスの作成時に COMClass テンプレートを使用すると、[COM の相互運用機能に登録] チェック ボックスは自動的にオンになります。Visual Studio .NET または Visual Studio 2005 で [COM の相互運用機能に登録] チェック ボックスがオンであることを確認するには、以下の手順を実行します。
  1. Visual Studio .NET または Visual Studio 2005 を起動します。
  2. COM 相互運用機能用にビルドするプロジェクトを含むソリューションを開きます。
  3. [表示] メニューの [ソリューション エクスプローラ] をクリックします。
  4. ソリューション エクスプローラで、COM 相互運用機能用にビルドするプロジェクトを右クリックし、[プロパティ] をクリックします。
  5. [構成プロパティ] をクリックし、[ビルド] ノードをクリックします。

    : Visual Studio 2005 では、左側のウィンドウで [コンパイル] をクリックします。
  6. [COM の相互運用機能に登録] チェック ボックスをオンにします。このオプションは、クラス ライブラリ プロジェクトでのみ有効です。
  7. [OK] をクリックして、[プロパティ ページ] ダイアログ ボックスを閉じます。
Visual Studio .NET または Visual Studio 2005 がインストールされていない場合、またはマネージ アセンブリのタイプ ライブラリ (.tlb) ファイルを手動で生成して登録する必要がある場合は、アセンブリ登録ツール (RegAsm.exe) を /TLB スイッチと共に使用します。また、マネージ アセンブリがプライベート アセンブリであり、ホスト プロセス (EXE) とは別のフォルダに格納する場合は、/Codebase スイッチも使用する必要があります。

プライベート アセンブリはアプリケーションと共に配置され、このアプリケーションによってのみ使用されます。他のアプリケーションはプライベート アセンブリを共有できません。プライベート アセンブリは、ホスト プロセス (EXE) と同じフォルダにインストールされるよう設計されています。つまり、COM クライアント アプリケーションでは、アセンブリがそのアプリケーションと同じフォルダに配置されるということです。共有アセンブリは、コンピュータ上で複数のアプリケーションによる使用が可能です。共有アセンブリを作成するには、厳密な名前を使用してアセンブリに署名し、アプリケーションを利用するコンピュータのグローバル アセンブリ キャッシュ (GAC) にインストールする必要があります。

厳密な名前を使用してアセンブリに署名し、アプリケーションを利用するコンピュータのグローバル アセンブリ キャッシュ (GAC) にインストールする方法の詳細については、以下のマイクロソフト Web サイトを参照してください。
http://msdn2.microsoft.com/ja-JP/library/xc31ft41.aspx
アセンブリの登録時には、/tlb: スイッチと /Codebase スイッチの両方を使用する必要があります。/tlb: スイッチを指定するとタイプ ライブラリの生成と登録が行われ、/Codebase スイッチを指定すると Windows レジストリにマネージ アセンブリの場所が登録されます。/Codebase スイッチを使用せず、アセンブリがグローバル アセンブリ キャッシュ (GAC) にインストールされていない場合は、アセンブリのコピーを各 COM クライアント アプリケーション (EXE) のフォルダに配置し、共通言語ランタイム (CLR) がアセンブリを見つけられるようにしておく必要があります。

タイプ ライブラリを生成して登録し、マネージ アセンブリの場所を登録するには、コマンド プロンプトで以下のコマンドを入力します。
Regasm AssemblyName.dll /tlb: FileName.tlb /codebase

Visual Basic .NET で、COM で呼び出し可能なアセンブリを作成する

  1. Visual Studio .NET または Visual Studio 2005 を起動します。
  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
  3. [プロジェクトの種類] ボックスの一覧の [Visual Basic プロジェクト] をクリックします。

    : Visual Studio2005 では、[プロジェクトの種類] ボックスの一覧の [Visual Basic] をクリックします。
  4. [テンプレート] ボックスの一覧の [クラス ライブラリ] をクリックします。
  5. [プロジェクト名] ボックスに TestProj と入力し、[OK] をクリックします。

    デフォルトで Class1 が作成されます。
  6. [表示] メニューの [ソリューション エクスプローラ] をクリックします。
  7. [Class1.vb] を右クリックし、[削除] をクリックします。Class1.vb ソース ファイルの削除を確認するメッセージが表示されたら、[OK] をクリックします。
  8. [プロジェクト] メニューの [クラスの追加] をクリックします。
  9. [テンプレート] で [クラス] をクリックします。
  10. クラスに COMClass1.vb という名前を付け、[開く] をクリックします。

    COMClass1 が以下のコードで作成されます。
    <ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
    Public Class ComClass1
    
    #Region "COM GUIDs"
        ' These  GUIDs provide the COM identity for this class 
        ' and its COM interfaces. If you change them, existing 
        ' clients will no longer be able to access the class.
        Public Const ClassId As String = "6DB79AF2-F661-44AC-8458-62B06BFDD9E4"
        Public Const InterfaceId As String = "EDED909C-9271-4670-BA32-109AE917B1D7"
        Public Const EventsId As String = "17C731B8-CE61-4B5F-B114-10F3E46153AC"
    #End Region
    
        ' A creatable COM class must have a Public Sub New() 
        ' without parameters. Otherwise, the class will not be 
        ' registered in the COM registry and cannot be created 
        ' through CreateObject.
        Public Sub New()
            MyBase.New()
        End Sub
    
    End Class
  11. COMClass1 に以下の関数を追加します。
       Public Function myFunction() As Integer
          Return 100
       End Function
  12. ソリューション エクスプローラで、[Project Name] を右クリックし、[プロパティ] をクリックします。
  13. [構成プロパティ] の下にある [ビルド] をクリックします。
  14. [COM の相互運用機能に登録] チェック ボックスがオンであることを確認し、[OK] をクリックします。
  15. [ビルド] メニューの [ソリューションのビルド] をクリックして、プロジェクトをビルドします。
  16. Visual Basic 6.0 を起動します。
  17. [ファイル] メニューの [新しいプロジェクト] をクリックし、[新しいプロジェクト] ダイアログ ボックスの [標準 EXE] をクリックし、[OK] をクリックします。

    デフォルトでは、Form1 という名前のフォームが作成されます。
  18. [プロジェクト] メニューの [参照設定] をクリックします。
  19. [参照可能なライブラリ ファイル] ボックスの一覧で [TestProj] をダブルクリックし、[OK] をクリックします。
  20. フォームにコマンド ボタンを 1 つ追加します。
  21. [Command1] をダブルクリックして、コード ウィンドウを開きます。
  22. Command1_Click イベントに以下のコードを追加します。
    Dim myObject As TestProj.COMClass1
    Set myObject = New TestProj.COMClass1
    MsgBox myObject.myFunction
  23. [実行] メニューの [開始] をクリックします。
  24. コマンド ボタンをクリックします。

    100 という値を含むメッセージが表示されます。

関連情報

関連情報については、以下のマイクロソフト Web サイトを参照してください。
アンマネージ コードとの相互運用
http://msdn.microsoft.com/library/ja/cpguide/html/cpconinteroperatingwithunmanagedcode.asp

プロパティ

文書番号: 817248 - 最終更新日: 2007年12月3日 - リビジョン: 6.3
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
キーワード:?
kbhowtomaster kbinterop kbnamespace kbdll kbautomation kbcominterop kbvs2005applies kbvs2005swept KB817248
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com