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

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

' 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 用に意図したメッセージをすべて受信します。 実稼働環境で使用するアプリケーションには、より厳密なテストを含め、実際にアプリケーションがアプリケーションに属 XLMAIN Excel。

注釈

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

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

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

既定のケース

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

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

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

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

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

クラスの指定

オブジェクトの を指定しない場合は、指定したファイル名に基づいて、開始するアプリケーションとアクティブ化するオブジェクト Class が Automation によって決定されます。 ただし、一部のファイルでは、複数のクラスの オブジェクトをサポートできます。 たとえば、描画では、オブジェクトという 3 種類のオブジェクトがサポートされ、そのすべてが同じファイルに Application Drawing 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 単一インスタンス オブジェクトとして登録されている場合、呼び出された回数に関係なく、オブジェクトのインスタンスは 1 CreateObject つしか作成されません。 単一インスタンス オブジェクトでは、長さ 0 の文字列 ( ) 構文で呼び出されると常に同じインスタンスが返され、引数を省略するとエラーが GetObject "" PathName 発生します。 を使用して GetObject 、 を使用して作成されたクラスへの参照を取得Visual Basic。

重要

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

適用対象

こちらもご覧ください