Interaction.GetObject(String, String) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 がまだ実行されていない場合にエラーが発生します。この例では、 フラグが excelWasNotRunning
に True
設定されます。 の 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
省略すると、 GetObject
で Class
指定されたクラス型の現在アクティブなオブジェクトが返されます。 指定した型のオブジェクトが存在しない場合は、エラーが発生します。
サブオブジェクトへのアクセス
一部のアプリケーションでは、ファイルに関連付けられているサブオブジェクトをアクティブ化できます。 これを行うには、ファイル名の末尾に感嘆符 (!
) を追加し、その後に、アクティブにするファイルの部分を識別する文字列を付けます。 この文字列を作成する方法については、オブジェクトを作成したアプリケーションのドキュメントを参照してください。
たとえば、図面アプリケーションでは、図面に対して複数のレイヤがファイルに格納されている場合があります。 次のコードを使用して、 という schema.cad
名前の図面内のレイヤーをアクティブ化できます。
layerObject = GetObject("C:\CAD\schema.cad!Layer3")
クラスの指定
オブジェクトの Class
を指定しない場合、Automation は、指定したファイル名に基づいて、起動するアプリケーションとアクティブ化するオブジェクトを決定します。 ただし、一部のファイルでは、複数のオブジェクト クラスをサポートできます。 たとえば、図面では、オブジェクト、オブジェクト、Drawing
Toolbar
オブジェクトの 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」および「コード アクセス許可」を参照してください。
適用対象
こちらもご覧ください
.NET