示例#1
0
文件: Xpcom.cs 项目: Arsslensoft/ALFX
        public static void FreeComObject <T>(ref T obj)
            where T : class
        {
#if false
            // When debug -> use special version, that writes debug information
            ComDebug.DebugFreeComObject(ref obj);
#else
            // take it to local variable
            var localObj = Interlocked.Exchange(ref obj, null);
            // if it is already null -> return
            if (localObj == null)
            {
                return;
            }

            if (Marshal.IsComObject(localObj))             // Is real COM? Not CLR object?
            {
                if (IsMono && Xpcom.InvokeRequired)
                {
                    _comGC.Free(ref localObj);
                }
                else
                {
                    Marshal.ReleaseComObject(localObj);
                }
            }
#endif
        }
示例#2
0
        internal static void FreeComObject <T>(ref T obj)
            where T : class
        {
#if false
            // When debug -> use special version, that writes debug information
            ComDebug.DebugFreeComObject(ref obj);
#else
            // take it to local variable
            var localObj = Interlocked.Exchange(ref obj, null);
            // if it is already null -> return
            if (localObj == null)
            {
                return;
            }
            Marshal.ReleaseComObject(localObj);
#endif
        }