Freigeben über


Marshal.GetIUnknownForObject-Methode

Gibt eine IUnknown-Schnittstelle aus einem verwalteten Objekt zurück.

Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Shared Function GetIUnknownForObject ( _
    o As Object _
) As IntPtr
'Usage
Dim o As Object
Dim returnValue As IntPtr

returnValue = Marshal.GetIUnknownForObject(o)
public static IntPtr GetIUnknownForObject (
    Object o
)
public:
static IntPtr GetIUnknownForObject (
    Object^ o
)
public static IntPtr GetIUnknownForObject (
    Object o
)
public static function GetIUnknownForObject (
    o : Object
) : IntPtr

Parameter

  • o
    Das Objekt, dessen IUnknown-Schnittstelle angefordert wird.

Rückgabewert

Der IUnknown-Zeiger für den o-Parameter.

Hinweise

In verwaltetem Code wird selten direkt mit der IUnknown-Schnittstelle gearbeitet. GetIUnknownForObject ist jedoch hilfreich beim Aufrufen einer Methode, die einen COM-Objektparameter als IntPtr-Typ verfügbar macht, sowie beim benutzerdefinierten Marshalling. Das Aufrufen eines Objekts mit dieser Methode bewirkt, dass der Verweiszähler für den Schnittstellenzeiger vor der Rückgabe des Zeigers inkrementiert wird. Verwenden Sie immer Marshal.Release, um den Verweiszähler zu dekrementieren, nachdem die Verarbeitung des Zeigers abgeschlossen ist. Diese Methode stellt die Umkehrfunktionen der Marshal.GetObjectForIUnknown-Methode bereit.

Sie können diese Methode auch für ein verwaltetes Objekt verwenden, um einen Schnittstellenzeiger auf den COM-Aufrufwrapper des Objekts abzurufen. Weitere Informationen finden Sie unter COM Callable Wrapper (CCW).

Hinweis

Diese Methode verwendet SecurityAction.LinkDemand, um einen Aufruf aus nicht vertrauenswürdigem Code zu verhindern. Nur der direkte Aufrufer muss über die SecurityPermissionAttribute.UnmanagedCode-Berechtigung verfügen. Wenn der Code aus teilweise vertrauenswürdigem Code aufgerufen werden kann, dürfen Benutzereingaben nicht ohne Validierung an Methoden der Marshal-Klasse übergeben werden. Wichtige Einschränkungen bei der Verwendung des LinkDemand-Members finden Sie unter "Demand" und "LinkDemand".

Beispiel

Im folgenden Codebeispiel wird der Abruf einer IUnknown-Schnittstelle für ein verwaltetes Objekt mithilfe der GetIUnknownForObject-Methode veranschaulicht.

Imports System.Runtime.InteropServices

Module Program


    Sub Run()

        ' Dim an Integer object
        Dim IntegerObject As Integer = 1

        ' Dim a pointer
        Dim pointer As IntPtr

        Console.WriteLine("Calling Marshal.GetIUnknownForObject...")

        ' Get the IUnKnown pointer for the Integer object
        pointer = Marshal.GetIUnknownForObject(IntegerObject)

        Console.WriteLine("Calling Marshal.Release...")

        ' Always call Marshal.Release to decrement the reference count.
        Marshal.Release(pointer)



    End Sub

    Sub Main(ByVal args() As String)

        Run()

    End Sub

End Module

using System;
using System.Runtime.InteropServices;

class Program
{

    static void Run()
    {

        // Create an int object
        int obj = 1;

        Console.WriteLine("Calling Marshal.GetIUnknownForObject...");

        // Get the IUnKnown pointer for the Integer object
        IntPtr pointer = Marshal.GetIUnknownForObject(obj);

        Console.WriteLine("Calling Marshal.Release...");

        // Always call Marshal.Release to decrement the reference count.
        Marshal.Release(pointer);
    }

    static void Main(string[] args)
    {
        Run();
    }
}

.NET Framework-Sicherheit

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

Marshal-Klasse
Marshal-Member
System.Runtime.InteropServices-Namespace
Release
GetObjectForIUnknown