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 представляет указатель интерфейса. Однако, так как все интерфейсы COM являются производными напрямую или косвенноIUnknown, вы можете передать любой IUnknown COM-интерфейс этому методу. Объект, возвращаемый GetObjectForIUnknown средой выполнения, является вызываемой оболочкой среды выполнения, которая управляет средой CLR, так как она выполняет любой другой управляемый объект. Тип этой оболочки часто является базовым System.__ComObject типом, который является скрытым типом, используемым при неоднозначном типе оболочки. Вы по-прежнему можете выполнять вызовы с поздними привязками к такому базовому типу, пока com-объект реализует интерфейс IDispatch . Аналогичным образом можно привести возвращаемый объект в соответствующий COM-интерфейс.
Чтобы объект был упакован с определенным типом управляемого класса (а не универсальным типом оболочки), необходимо соответствовать следующим требованиям:
Реализуйте интерфейс IProvideClassInfo для com-объекта.
Зарегистрируйте содержащую сборку в Regasm.exe (средство регистрации сборок).
Кроме того, можно избежать этих требований и по-прежнему получить объект, который упакован с определенным типом управляемого класса с помощью Marshal.GetTypedObjectForIUnknown метода.