Marshal.GetActiveObject(String) Yöntem

Tanım

Çalışan nesne tablosundan (ROT) belirtilen nesnenin çalışan bir örneğini alır.

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

Parametreler

progID
String

İstenen nesnenin programlı tanımlayıcısı (ProgID).

Döndürülenler

İstenen nesne; aksi takdirde null. Bu nesneyi desteklediği herhangi bir COM arabirimine dönüştürebilirsiniz.

Öznitelikler

Özel durumlar

Nesne bulunamadı.

Örnekler

Aşağıdaki örnek, çalışan bir Microsoft Word örneğiyle yapılandırılmış bir bilgisayarda çalıştırıldı. Çalışan Microsoft Excel örneği yoktu.

Örnek iki kez çağrır GetActiveObject . İlk çağrı, bir Microsoft Word örneğine (Word.Application nesnesinin bir örneği) başvuru almaya çalışır. İkinci çağrı, Microsoft Excel örneğine (Excel.Application nesnesinin bir örneği) başvuru almaya çalışır.

Kod, başarılı bir şekilde Microsoft Word örneğine başvuru alır. Ancak, Microsoft Excel çalışmadığından, ikinci nesneyi alma girişimi bir COMException oluşturur.

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
'

Açıklamalar

GetActiveObject OLEAUT32.DLL COM GetActiveObject işlevini kullanıma sunar; ancak, ikincisi bu yöntem tarafından beklenen programlı tanımlayıcı () yerine bir sınıf tanımlayıcısı (ProgIDCLSID) bekler. Kayıtlı ProgIDolmayan bir COM nesnesinin çalışan bir örneğini almak için COM GetActiveObject işlevini tanımlamak için platform invoke komutunu kullanın. Platform çağrısının açıklaması için bkz. Yönetilmeyen DLL İşlevlerini Kullanma.

ProgID ve CLSID

Kayıt defterinin HKEY_CLASSES_ROOT alt ağacındaki anahtarlar çeşitli alt anahtar türleri içerir. Alt anahtarların çoğu, kullanıcı dostu bir dizeyi CLSID ile eşleyen ProgID'lerdir. Uygulamalar genellikle sayısal CLSID'ler yerine bu okunabilir dizeleri kullanır. Sistem üzerinde yüklü olan bileşenin en son sürümüne eşlenen sürüm bağımsız bir ProgID genellikle vardır.

Uygulamalar ve bileşenler öncelikle karşılık gelen CLSID'lerini almak için ProgID'leri kullanır.

Şunlara uygulanır