Marshal.GetObjectForIUnknown(IntPtr) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает экземпляр типа, представляющего COM-объект, с помощью указателя на его интерфейс IUnknown.
public:
static System::Object ^ GetObjectForIUnknown(IntPtr pUnk);
[System.Security.SecurityCritical]
public static object GetObjectForIUnknown (IntPtr pUnk);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static object GetObjectForIUnknown (IntPtr pUnk);
public static object GetObjectForIUnknown (IntPtr pUnk);
[<System.Security.SecurityCritical>]
static member GetObjectForIUnknown : nativeint -> obj
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetObjectForIUnknown : nativeint -> obj
static member GetObjectForIUnknown : nativeint -> obj
Public Shared Function GetObjectForIUnknown (pUnk As IntPtr) As Object
Параметры
- pUnk
-
IntPtr
nativeint
Указатель на интерфейс IUnknown
.
Возвращаемое значение
Объект, представляющий указанный неуправляемый COM-объект.
- Атрибуты
Исключения
pUnk
имеет значение Zero.
Комментарии
Этот метод выполняет оболочку IUnknown
в управляемый объект. Это увеличивает количество ссылок com-компонента. Количество ссылок уменьшается, когда среда выполнения выполняет сборку мусора для управляемого объекта, представляющего COM-объект.
Параметр pUnk
представляет IUnknown
указатель интерфейса. Однако, так как все COM-интерфейсы наследуются прямо или косвенно от IUnknown
, в этот метод можно передать любой COM-интерфейс. Объект, возвращаемый методом GetObjectForIUnknown , является вызываемой оболочкой среды выполнения, которой управляет среда CLR, как и любой другой управляемый объект. Тип этой оболочки часто является базовым System.__ComObject
типом, который является скрытым типом, используемым, если тип оболочки является неоднозначным. Вы по-прежнему можете выполнять вызовы с поздней привязкой к такому базовому типу, если COM-объект реализует интерфейс IDispatch . Аналогичным образом можно привести возвращенный объект к соответствующему COM-интерфейсу.
Чтобы объект был упакован с определенным типом управляемого класса (а не универсальным типом-оболочкой), необходимо соблюдать следующие требования:
Реализуйте интерфейс IProvideClassInfo для COM-объекта.
Зарегистрируйте содержащую сборку с помощьюRegasm.exe (средство регистрации сборок).
Кроме того, можно избежать этих требований и по-прежнему получить объект, заключенный в оболочку с определенным типом управляемого Marshal.GetTypedObjectForIUnknown класса, с помощью метода .