Пример #1
0
        public WeakComHandle(THandle comAggregateObject)
        {
            if (comAggregateObject == null)
            {
                _managedObjectWeakReference  = null;
                _pUnkOfInnerUnknownWhenAlive = IntPtr.Zero;
            }

            var pUnk          = IntPtr.Zero;
            var managedObject = ComAggregate.GetManagedObject <TObject>(comAggregateObject);

            try
            {
                pUnk = Marshal.GetIUnknownForObject(managedObject);
                _pUnkOfInnerUnknownWhenAlive = pUnk;
            }
            finally
            {
                if (pUnk != IntPtr.Zero)
                {
                    Marshal.Release(pUnk);
                }
            }

            _managedObjectWeakReference = new WeakReference(managedObject);
        }
Пример #2
0
 public ComHandle(THandle handleOrManagedObject)
 {
     if (handleOrManagedObject == null)
     {
         _handle        = null;
         _managedObject = null;
     }
     else if (Marshal.IsComObject(handleOrManagedObject))
     {
         _handle        = handleOrManagedObject;
         _managedObject = ComAggregate.GetManagedObject <TObject>(handleOrManagedObject);
     }
     else
     {
         _handle        = (THandle)ComAggregate.TryGetWrapper(handleOrManagedObject);
         _managedObject = (TObject)handleOrManagedObject;
     }
 }