Marshal.GetActiveObject(String) メソッド

定義

ランニング オブジェクト テーブル (ROT: Running Object Table) から指定したオブジェクトの実行中のインスタンスを取得します。

public:
 static System::Object ^ GetActiveObject(System::String ^ progID);
public static object GetActiveObject (string progID);
[System.Security.SecurityCritical]
public static object GetActiveObject (string progID);
static member GetActiveObject : string -> obj
[<System.Security.SecurityCritical>]
static member GetActiveObject : string -> obj
Public Shared Function GetActiveObject (progID As String) As Object

パラメーター

progID
String

要求されたオブジェクトのプログラム ID (ProgId)。

戻り値

Object

要求されたオブジェクト。それ以外の場合は null。 このオブジェクトは、サポートされる任意の COM インターフェイスにキャストできます。

属性

例外

オブジェクトが見つかりませんでした。

次の例は、Microsoft Word の実行中のインスタンスで構成されたコンピューターで実行されています。 実行中の Excel のインスタンスMicrosoftありませんでした。

この例では、 が 2 回呼び出 GetActiveObject されます。 最初の呼び出しでは、Word のインスタンス (Word.Applicationオブジェクトのインスタンス) への参照Microsoft取得しようとします。 2 番目の呼び出しでは、Excel のインスタンス (Excel.Applicationオブジェクトのインスタンス) への参照Microsoft取得しようとします。

このコードは、Word のインスタンスへの参照Microsoft正常に取得します。 ただし、Microsoft Excel が実行されていないため、2 番目のオブジェクトを取得しようとすると、 COMExceptionが発生します。


using System;
using System.Runtime.InteropServices;

class MainFunction
{
    static void Main()
        {
        Console.WriteLine("\nSample: C# System.Runtime.InteropServices.Marshal.GetActiveObject.cs\n"); 

        GetObj(1, "Word.Application");
        GetObj(2, "Excel.Application");
        }

    static void GetObj(int i, String progID)
    {
        Object obj = null;

        Console.WriteLine("\n" +i+") Object obj = GetActiveObject(\"" + progID + "\")");
        try
           { obj = Marshal.GetActiveObject(progID); }
        catch (Exception e)
           {
           Write2Console("\n   Failure: obj did not get initialized\n" + 
                         "   Exception = " +e.ToString().Substring(0,43), 0); 
           }
 
        if (obj != null)
           { Write2Console("\n   Success: obj = " + obj.ToString(), 1 ); }
    }

    static void Write2Console(String s, int color)
        {
        Console.ForegroundColor = color == 1? ConsoleColor.Green : ConsoleColor.Red;
        Console.WriteLine(s); 
        Console.ForegroundColor = ConsoleColor.Gray;
    }
}

/*
Expected Output:

Sample: C# System.Runtime.InteropServices.Marshal.GetActiveObject.cs

1) Object obj = GetActiveObject("Word.Application")

   Success: obj = System.__ComObject

2) Object obj = GetActiveObject("Excel.Application")

   Failure: obj did not get initialized
   Exception = System.Runtime.InteropServices.COMException
*/

Imports System.Runtime.InteropServices

Module Module1

    Sub Main()
        Console.WriteLine(vbcrlf + "Sample: VB System.Runtime.InteropServices.Marshal.GetActiveObject.vb" + vbcrlf) 
        GetObj(1, "Word.Application")
        GetObj(2, "Excel.Application")
    End Sub


    Sub GetObj(ByVal i As Integer, ByVal progID As [String])
        Dim obj As [Object] = Nothing
        
        Console.WriteLine((vbLf & i & ") Object obj = GetActiveObject(""") + progID & """)")
        Try
            obj = Marshal.GetActiveObject(progID)
        Catch e As Exception
            Write2Console((vbLf & "   Failure: obj did not get initialized" & vbLf & "   Exception = ") + e.ToString().Substring(0, 43), 0)
        End Try
        
        If obj IsNot Nothing Then
            Write2Console(vbLf & "   Success: obj = " & obj.ToString(), 1)
        End If
    End Sub

    Sub Write2Console(ByVal s As [String], ByVal color As Integer)
        Console.ForegroundColor = If(color = 1, ConsoleColor.Green, ConsoleColor.Red)
        Console.WriteLine(s)
        Console.ForegroundColor = ConsoleColor.Gray
    End Sub

End Module

'Expected Output:
'
'Sample: VB System.Runtime.InteropServices.Marshal.GetActiveObject.vb
'
'1) Object obj = GetActiveObject("Word.Application")
'
'   Success: obj = System.__ComObject
'
'2) Object obj = GetActiveObject("Excel.Application")
'
'   Failure: obj did not get initialized
'   Exception = System.Runtime.InteropServices.COMException
'

注釈

GetActiveObject OLEAUT32.DLLから COM GetActiveObject 関数を公開します。ただし、後者では、このメソッドで想定されるプログラム識別子 () ではなく、クラス識別子 (ProgIDCLSID) が必要です。 登録されていない ProgIDCOM オブジェクトの実行中のインスタンスを取得するには、プラットフォーム呼び出しを使用して COM GetActiveObject 関数を定義します。 プラットフォーム呼び出しの説明については、「 アンマネージ DLL 関数の使用」を参照してください。

ProgID と CLSID

レジストリのHKEY_CLASSES_ROOT サブツリー内のキーには、さまざまなサブキーの種類が含まれています。 ほとんどのサブキーは ProgID であり、わかりやすい文字列を CLSID にマップします。 アプリケーションでは、多くの場合、数値 CLSID の代わりに、人間が判読できるこれらの文字列が使用されます。 多くの場合、コンポーネントにはバージョンに依存しない ProgID があり、システムにインストールされているコンポーネントの最新バージョンにマップされます。

アプリケーションとコンポーネントは、主に ProgID を使用して対応する CLSID を取得します。

適用対象