Marshal.GetActiveObject(String) 메서드

정의

ROT(실행 개체 테이블)에서 지정된 개체의 실행 중인 인스턴스를 가져옵니다.

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

요청된 개체의 ProgID(프로그래밍 식별자)입니다.

반환

Object

요청된 개체입니다. 그렇지 않으면 null입니다. 이 개체를 지원되는 COM 인터페이스로 캐스팅할 수 있습니다.

특성

예외

개체를 찾을 수 없습니다.

예제

다음 예제는 Microsoft Word의 실행 중인 인스턴스로 구성된 컴퓨터에서 실행되었습니다. Microsoft Excel이 실행되는 인스턴스가 없습니다.

이 예제에서는 두 번 호출합니다 GetActiveObject . 첫 번째 호출은 Microsoft Word 인스턴스(개체의 인스턴스)에 대한 참조를 Word.Application 검색하려고 시도합니다. 두 번째 호출은 Microsoft Excel 인스턴스(개체의 인스턴스)에 대한 참조를 Excel.Application 검색하려고 시도합니다.

코드는 Microsoft Word 인스턴스에 대한 참조를 성공적으로 검색합니다. 그러나 Microsoft Excel이 실행되고 있지 않으므로 두 번째 개체 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 함수를 노출합니다. 그러나 후자는 이 메서드에서 예상하는 프로그래밍 방식 식별자() 대신 CLSID(ProgID클래스 식별자)가 필요합니다. 등록 ProgID되지 않은 COM 개체의 실행 중인 인스턴스를 가져오려면 플랫폼 호출을 사용하여 COM GetActiveObject 함수를 정의합니다. 플랫폼 호출에 대한 설명은 관리되지 않는 DLL 함수 사용을 참조하세요.

ProgID 및 CLSID

레지스트리의 HKEY_CLASSES_ROOT 하위 트리에 있는 키에는 다양한 하위 키 유형이 포함됩니다. 대부분의 하위 키는 사용자에게 친숙한 문자열을 CLSID에 매핑하는 ProgID입니다. 종종 애플리케이션 숫자 Clsid 대신 이러한 사용자를 읽을 수 있는 문자열을 사용합니다. 구성 요소에는 시스템에 설치된 구성 요소의 최신 버전에 매핑되는 버전 독립적 ProgID가 있는 경우가 많습니다.

애플리케이션 및 구성 요소 Progid가 해당 Clsid를 검색할 주로 사용 합니다.

적용 대상