Marshal.GetActiveObject(String) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Ç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.