次の方法で共有


Interaction.GetObject(String, String) メソッド

定義

COM コンポーネントにより得られたオブジェクトへの参照を返します。

[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static object? GetObject (string? PathName = default, string? Class = default);
public static object GetObject (string PathName = default, string Class = default);
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetObject : string * string -> obj
static member GetObject : string * string -> obj
Public Function GetObject (Optional PathName As String = Nothing, Optional Class As String = Nothing) As Object

パラメーター

PathName
String

省略可能。 String. 取得するオブジェクトが含まれているファイルの完全パスと名前です。 PathName を省略した場合、Class が必須になります。

Class
String

PathName が指定されていない場合は必須。 String. オブジェクトのクラスを表す文字列です。 Class 引数の構文と指定項目を次に示します。

appname.objecttype

[1|1] パラメーター

[1|2] 説明

[2|1] appname

[2|2] 必須。 String. オブジェクトを提供するアプリケーションの名前です。

[3|1] objecttype

[3|2] 必須。 String. 作成するオブジェクトの型またはクラスです。

戻り値

COM コンポーネントにより得られたオブジェクトへの参照。

属性

例外

指定されたクラス型のオブジェクトが存在しません。

指定されたパスおよびファイル名を持つオブジェクトが存在しません。

次の例では、 関数を GetObject 使用して、特定の Microsoft Excel ワークシート (excelObj) への参照を取得します。 ワークシートの Application プロパティを使用して Excel を表示し、閉じ、他のアクションを実行します。 2 つの API 呼び出しを detectExcel 使用して、プロシージャは Excel を検索し、実行中の場合は、実行中のオブジェクト テーブルに入力します。 を最初に GetObject 呼び出すと、Excel がまだ実行されていない場合にエラーが発生します。この例では、 フラグが excelWasNotRunningTrue設定されます。 の 2 番目の呼び出し GetObject では、開くファイルを指定します。 Excel がまだ実行されていない場合、2 番目の呼び出しで開始され、 test.xls指定したファイル で表されるワークシートへの参照が返されます。 ファイルは、指定した場所に存在する必要があります。それ以外の場合、Visual Basic は を FileNotFoundExceptionスローします。 次に、コード例では、Excel と、指定したワークシートを含むウィンドウの両方を表示します。

この例では、オブジェクトが 型Objectの変数に割り当てられる遅延バインディングを使用するため、 が必要Option Strict Offです。 Visual Studio の [プロジェクト] メニューの [参照の追加] ダイアログ ボックスの [COM] タブから Excel タイプ ライブラリへの参照を追加する場合は、特定のオブジェクト型のオブジェクトを指定Option Strict Onおよび宣言できます。

' Add Option Strict Off to the top of your program.
Option Strict Off
' Test to see if a copy of Excel is already running.
Private Sub testExcelRunning()
    On Error Resume Next
    ' GetObject called without the first argument returns a
    ' reference to an instance of the application. If the
    ' application is not already running, an error occurs.
    Dim excelObj As Object = GetObject(, "Excel.Application")
    If Err.Number = 0 Then
        MsgBox("Excel is running")
    Else
        MsgBox("Excel is not running")
    End If
    Err.Clear()
    excelObj = Nothing
End Sub
Private Sub getExcel()
    Dim fileName As String = "c:\vb\test.xls"

    If Not My.Computer.FileSystem.FileExists(fileName) Then
        MsgBox(fileName & " does not exist")
        Exit Sub
    End If

    ' Set the object variable to refer to the file you want to use.
    Dim excelObj As Object = GetObject(fileName)
    ' Show Excel through its Application property. 
    excelObj.Application.Visible = True
    ' Show the window containing the file.
    Dim winCount As Integer = excelObj.Parent.Windows.Count()
    excelObj.Parent.Windows(winCount).Visible = True

    ' Insert additional code to manipulate the test.xls file here.
    ' ...

    excelObj = Nothing
End Sub

関数を getExcel 呼び出すと、Excel が既に実行されているかどうかを確認するチェックが行われます。 そうでない場合は、インスタンスが作成されます。

重要

わかりやすくするために、前の例では、 と呼ばれる XLMAIN ウィンドウが Microsoft Excel のインスタンスに属していることを前提としています。 不正な改ざんによって起動された可能性のある別のオブジェクトがその名前のウィンドウを作成した場合は、Excel 用のすべてのメッセージを受け取ります。 運用環境に使用するアプリケーションでは、実際に Excel に属していることを XLMAIN 確認するために、より厳格なテストを含める必要があります。

注釈

関数を GetObject 使用して、COM コンポーネントのインスタンスをファイルから読み込みます。 次の例を使って説明します。

Dim CADObject As Object  
CADObject = GetObject("C:\CAD\schema.cad")  

このコードを実行すると、指定した PathName に関連付けられたアプリケーションが開始され、指定したファイル内のオブジェクトがアクティブ化されます。

既定のケース

が長さ 0 の文字列 ("") GetObject の場合PathNameは、指定したクラス型の新しいオブジェクト インスタンスを返します。 引数を PathName 省略すると、 GetObjectClass指定されたクラス型の現在アクティブなオブジェクトが返されます。 指定した型のオブジェクトが存在しない場合は、エラーが発生します。

サブオブジェクトへのアクセス

一部のアプリケーションでは、ファイルに関連付けられているサブオブジェクトをアクティブ化できます。 これを行うには、ファイル名の末尾に感嘆符 (!) を追加し、その後に、アクティブにするファイルの部分を識別する文字列を付けます。 この文字列を作成する方法については、オブジェクトを作成したアプリケーションのドキュメントを参照してください。

たとえば、図面アプリケーションでは、図面に対して複数のレイヤがファイルに格納されている場合があります。 次のコードを使用して、 という schema.cad名前の図面内のレイヤーをアクティブ化できます。

layerObject = GetObject("C:\CAD\schema.cad!Layer3")  

クラスの指定

オブジェクトの Classを指定しない場合、Automation は、指定したファイル名に基づいて、起動するアプリケーションとアクティブ化するオブジェクトを決定します。 ただし、一部のファイルでは、複数のオブジェクト クラスをサポートできます。 たとえば、図面では、オブジェクト、オブジェクト、DrawingToolbarオブジェクトの 3 種類のオブジェクトApplicationがサポートされている場合があります。これらはすべて同じファイルの一部です。 アクティブにするファイル内のオブジェクトを指定するには、省略可能な Class 引数を使用します。 次の例を使って説明します。

Dim drawObj As Object  
drawObj = GetObject("C:\Drawings\sample.drw", "Figment.Drawing")  

前の例では、 Figment は図面アプリケーションの名前であり、 Drawing サポートされているオブジェクトの種類の 1 つです。

オブジェクトの使用

オブジェクトがアクティブ化されたら、宣言したオブジェクト変数を使用してコード内でそのオブジェクトを参照します。 前の例では、 オブジェクト変数 drawObjを使用して、新しいオブジェクトのプロパティとメソッドにアクセスします。 次の例を使って説明します。

drawObj.Line(9, 90)  
drawObj.InsertText(9, 100, "Hello, world.")  
drawObj.SaveAs("C:\Drawings\sample.drw")  

注意

オブジェクトの現在の GetObject インスタンスがある場合、またはファイルを読み込んでオブジェクトを作成する場合は、 関数を使用します。 現在のインスタンスがなく、ファイルが読み込まれた状態でオブジェクトを開始したくない場合は、 関数を使用します CreateObject

オブジェクト自体が ActiveX 単一インスタンス オブジェクトとして登録されている場合、何回呼び出されても CreateObject 、オブジェクトのインスタンスは 1 つだけ作成されます。 単一インスタンス オブジェクトでは、 GetObject 長さ 0 の文字列 ("") 構文で呼び出されると常に同じインスタンスが返され、引数を PathName 省略するとエラーが発生します。 を使用 GetObject して、Visual Basic で作成されたクラスへの参照を取得することはできません。

重要

関数には GetObject アンマネージ コードのアクセス許可が必要です。これは、部分信頼の状況での実行に影響を与える可能性があります。 詳細については、「SecurityPermission」および「コード アクセス許可」を参照してください。

適用対象

こちらもご覧ください