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