internal void Advise(ComWrapper owner) { Owner = owner; var cpc = owner.ComObject.Target as ComTypes.IConnectionPointContainer; cpc.FindConnectionPoint(ref guid, out connectionPoint); connectionPoint.Advise(this, out cookie); isAdvised = true; }
/// <summary> /// ComWrapper のラッピングを解除し、COM オブジェクトを取り出します。 /// </summary> /// <param name="o">ラッピングを解除するオブジェクト。</param> /// <returns>ラッピング解除後の COM オブジェクト。</returns> public static object Unwrap(object o) { ComWrapper wrapper = o as ComWrapper; if (wrapper != null) { return(Unwrap(wrapper)); } SafeComObject comObject = o as SafeComObject; if (comObject != null) { return(Unwrap(comObject)); } return(o); }
/// <summary> /// ComWrapper クラスが管理しているラッパークラスのコレクションからラッパークラスを取り出します。 /// コレクションに無い場合は、CreateComWrapper メソッドを呼び出し、インスタンスを作成します。 /// </summary> /// <param name="comObject">ラップする COM オブジェクト。</param> /// <returns>comObject に対応したラッパークラスのインスタンス。</returns> protected ComWrapper GetComWrapper(object comObject) { using (SafeComObject key = new SafeComObject(comObject)) { if (Wrappers.TryGetValue(key, out ComWrapper comWrapper)) { if (!comWrapper.IsDisposed) { return(comWrapper); } else { Wrappers.Remove(comWrapper); } } ComWrapper wrapper = CreateComWrapper(key.Target, key.TypeName); wrapper.Root = Root; key.OwnsHandle = false; // comObject を解放しない return(wrapper); } }
/// <summary> /// ComWrapper のラッピングを解除し、COM オブジェクトを取り出します。 /// </summary> /// <param name="wrapper">ラッピングを解除するオブジェクト。</param> /// <returns>ラッピング解除後の COM オブジェクト。</returns> public static object Unwrap(ComWrapper wrapper) { return(wrapper.ComObject); }