Marshal.GetIUnknownForObject(Object) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Devuelve una interfaz IUnknown desde un objeto administrado.
public:
static IntPtr GetIUnknownForObject(System::Object ^ o);
[System.Security.SecurityCritical]
public static IntPtr GetIUnknownForObject (object o);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static IntPtr GetIUnknownForObject (object o);
public static IntPtr GetIUnknownForObject (object o);
[<System.Security.SecurityCritical>]
static member GetIUnknownForObject : obj -> nativeint
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetIUnknownForObject : obj -> nativeint
static member GetIUnknownForObject : obj -> nativeint
Public Shared Function GetIUnknownForObject (o As Object) As IntPtr
Parámetros
- o
- Object
Objeto cuya interfaz IUnknown
se solicita.
Devoluciones
nativeint
Puntero IUnknown
para el parámetro o
.
- Atributos
Ejemplos
En el ejemplo siguiente se muestra cómo recuperar una interfaz IUnknown para un objeto administrado mediante el GetIUnknownForObject método .
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();
}
}
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
Comentarios
En el código administrado, rara vez se trabaja directamente con la IUnknown
interfaz . Sin embargo, GetIUnknownForObject es útil al llamar a un método que expone un parámetro de objeto COM como un IntPtr tipo o con serialización personalizada. Llamar a un objeto con este método hace que el recuento de referencias aumente en el puntero de interfaz antes de que se devuelva el puntero.
Marshal.Release Use siempre para disminuir el recuento de referencias una vez que haya terminado con el puntero. Este método proporciona la funcionalidad opuesta del Marshal.GetObjectForIUnknown método .
También puede usar este método en un objeto administrado para obtener un puntero de interfaz al contenedor al que se puede llamar COM para el objeto .