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; }
/// <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); } }
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); }