Exemple #1
0
 public void Remove(ComWrapper item)
 {
     lock (SyncRoot) {
         SafeComObject key = item.ComObject;
         if (_Dictionary.ContainsKey(key))
         {
             _Dictionary.Remove(key);
         }
     }
 }
Exemple #2
0
 public WeakReference Add(ComWrapper item)
 {
     lock (SyncRoot) {
         SafeComObject key = item.ComObject;
         if (_Dictionary.ContainsKey(key))
         {
             _Dictionary.Remove(key);
         }
         WeakReference wr = new WeakReference(item);
         _Dictionary.Add(key, wr);
         return(wr);
     }
 }
Exemple #3
0
        internal static object Invoke(SafeComObject o, string name, params object[] args)
        {
            IReflect  reflectType = o.Target.GetType();
            ArrayList lst         = UnwrapArrayList(args);
            object    result      = reflectType.InvokeMember(
                name,
                InvokeMemberBindingFlags,
                null,
                o.Target,
                lst.ToArray(),
                null,
                null,
                NoArgumentNames);

            return(result);
        }
Exemple #4
0
        internal static T GetProperty <T>(SafeComObject o, string name, params object[] indices)
        {
            IReflect  reflectType = o.Target.GetType();
            ArrayList lst         = UnwrapArrayList(indices);
            object    obj         = reflectType.InvokeMember(
                name,
                InvokeGetPropertyBindingFlags,
                null,
                o.Target,
                lst.ToArray(),
                null,
                null,
                NoArgumentNames);

            return((T)obj);
        }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
 public bool TryGetValue(SafeComObject comObject, out ComWrapper item)
 {
     lock (SyncRoot) {
         if (_Dictionary.TryGetValue(comObject, out WeakReference wr))
         {
             if (wr.Target != null)
             {
                 item = (ComWrapper)wr.Target;
                 return(true);
             }
             else
             {
                 _Dictionary.Remove(comObject);
             }
         }
     }
     item = null;
     return(false);
 }
Exemple #7
0
        internal static void SetProperty(SafeComObject o, string name, object value, params object[] indices)
        {
            // InvokeMember に渡す配列は パラメタ + プロパティの設定値
            ArrayList lst = UnwrapArrayList(indices);

            lst.Add(Unwrap(value));

            IReflect reflectType = o.Target.GetType();

            reflectType.InvokeMember(
                name,
                InvokeSetPropertyBindingFlags,
                null,
                o.Target,
                lst.ToArray(),
                null,
                null,
                NoArgumentNames);
        }
Exemple #8
0
 /// <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);
     }
 }
Exemple #9
0
        public override bool Equals(object obj)
        {
            SafeComObject other = obj as SafeComObject;

            return(this == other);
        }
Exemple #10
0
 /// <summary>
 /// COM のラッパークラスを作成します。
 /// </summary>
 /// <param name="comObject">ラップする COM オブジェクト</param>
 protected ComWrapper(object comObject)
 {
     ComObject = new SafeComObject(comObject);
 }
Exemple #11
0
 internal static object Unwrap(SafeComObject comObject)
 {
     return(comObject.Target);
 }