public COMObject(COMVariant replacedObject)
        {
            if (false == replacedObject.IsCOMProxy)
            {
                throw new ArgumentException("argument is not a com proxy");
            }

            // remove variant from parent and add himself
            COMObject parent = replacedObject.ParentObject;

            parent.RemoveChildObject(replacedObject);
            parent.AddChildObject(this);

            // store members
            _parentObject     = parent;
            _underlyingObject = replacedObject.UnderlyingObject;
            _instanceType     = replacedObject.InstanceType;
        }
Exemple #2
0
        /// <summary>
        ///  creates a new COMVariant based on type of comVariant
        /// </summary>
        /// <param name="caller"></param>
        /// <param name="comVariant"></param>
        /// <returns></returns>
        public static COMVariant CreateVariantFromComProxy(COMObject caller, object comVariant)
        {
            if (null == comVariant)
            {
                return(null);
            }

            Type comVariantType = comVariant.GetType();

            if (false == comVariantType.IsCOMObject)
            {
                COMVariant newVariant = new COMVariant(caller, comVariant, comVariantType);
                return(newVariant);
            }
            else
            {
                IFactoryInfo factoryInfo   = GetFactoryInfo(comVariant);
                string       className     = TypeDescriptor.GetClassName(comVariant);
                string       fullClassName = factoryInfo.Namespace + "." + factoryInfo.Prefix + className;
                COMObject    newObject     = CreateObjectFromComProxy(factoryInfo, caller, comVariant, comVariantType, className, fullClassName);
                return(newObject);
            }
        }
Exemple #3
0
 public static void ReleaseParam(object param)
 {
     if (null != param)
     {
         if (param is COMObject)
         {
             COMObject comObject = param as COMObject;
             comObject.Dispose();
         }
         else if (param is COMVariant)
         {
             COMVariant comVariant = param as COMVariant;
             comVariant.Dispose();
         }
         else
         {
             Type paramType = param.GetType();
             if (true == paramType.IsCOMObject)
             {
                 Marshal.ReleaseComObject(param);
             }
         }
     }
 }
 public void RemoveChildObject(COMVariant childObject)
 {
     _listChildVariants.Remove(childObject);
 }
 public void AddChildObject(COMVariant childObject)
 {
     _listChildVariants.Add(childObject);
 }