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. 作成するオブジェクトの型またはクラスです。

戻り値

Object

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

属性

例外

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

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

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

この例では、オブジェクトが型Objectの変数に割り当てられる遅延バインディングを使用するため必要Option Strict Offです。 Visual Studioの [Project] メニュー の [参照の追加] ダイアログ ボックスの [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 の文字列 ("") の場合PathNameは、GetObject指定したクラス型の新しいオブジェクト インスタンスを返します。 引数を PathName 省略した場合は、 GetObject で指定された Classクラス型の現在アクティブなオブジェクトを返します。 指定した型のオブジェクトが存在しない場合は、エラーが発生します。

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

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

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

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

クラスの指定

オブジェクト Classを指定しない場合、Automation は、指定したファイル名に基づいて、起動するアプリケーションとアクティブにするオブジェクトを決定します。 ただし、一部のファイルでは、複数のオブジェクト クラスをサポートできます。 たとえば、図面では、オブジェクト、オブジェクト、Drawingオブジェクトの 3 種類のオブジェクトApplicationがサポートされており、Toolbarこれらはすべて同じファイルの一部です。 アクティブ化するファイル内のオブジェクトを指定するには、省略可能な 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 省略するとエラーが発生します。 Visual Basicで作成されたクラスへの参照を取得するために使用GetObjectすることはできません。

重要

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

適用対象

こちらもご覧ください