public void ExplicitOperatorRefCounterTest()
        {
            // operator is is increment com ref count - but RCW cleanup free's both references.
            // (This is a change from .net 3.5 -> 4.0)
            var item1 = Xpcom.CreateInstance <nsISupports>(Contracts.Array);
            var ptr   = Marshal.GetIUnknownForObject(item1);

            Marshal.Release(ptr);

            int comCount = ComDebug.GetComRefCount(item1);
            int rcwCount = ComDebug.GetRcwRefCount(item1);

            nsIArray item2 = (nsIArray)item1;

            int comCount1 = ComDebug.GetComRefCount(item1);
            int rcwCount1 = ComDebug.GetRcwRefCount(item1);
            int comCount2 = ComDebug.GetComRefCount(item2);
            int rcwCount2 = ComDebug.GetRcwRefCount(item2);

            Marshal.AddRef(ptr);
            int free = Marshal.ReleaseComObject(item2);

            Assert.AreEqual(0, Marshal.Release(ptr), "Releasing the RCW by ReleaseComObject should have called Release twice.");

            Assert.AreEqual(0, comCount2 - comCount1);
            Assert.AreEqual(0, rcwCount2 - rcwCount1);
            Assert.AreEqual(1, comCount2 - comCount);
            Assert.AreEqual(0, rcwCount2 - rcwCount);
            Assert.AreEqual(0, free);
        }
        internal static T GetElementAs <T>(this nsIArray array, int index)
        {
            Guid uid = typeof(T).GUID;
            var  ptr = array.QueryElementAt((uint)index, ref uid);
            var  obj = ( T )Xpcom.GetObjectForIUnknown(ptr);

            return(obj);
        }
        internal static T GetElementAs <T>(this nsIArray array, int index)
        {
            Guid uid = typeof(T).GUID;
            var  ptr = array.QueryElementAt((uint)index, ref uid);
            var  obj = ( T )System.Runtime.InteropServices.Marshal.GetObjectForIUnknown(ptr);

            return(obj);
        }
        public void ExplicitOperatorRefCounterTest()
        {
            // operator explicit is NOT increment counters
            var item1 = Xpcom.CreateInstance <nsISupports>(Contracts.Array);

            int comCount = ComDebug.GetComRefCount(item1);
            int rcwCount = ComDebug.GetRcwRefCount(item1);

            nsIArray item2 = (nsIArray)item1;

            int comCount1 = ComDebug.GetComRefCount(item1);
            int rcwCount1 = ComDebug.GetRcwRefCount(item1);
            int comCount2 = ComDebug.GetComRefCount(item2);
            int rcwCount2 = ComDebug.GetRcwRefCount(item2);

            int free = Marshal.ReleaseComObject(item2);

            Assert.AreEqual(0, comCount2 - comCount1);
            Assert.AreEqual(0, rcwCount2 - rcwCount1);
            Assert.AreEqual(0, comCount2 - comCount);
            Assert.AreEqual(0, rcwCount2 - rcwCount);
            Assert.AreEqual(0, free);
        }
 internal GeckoArray(nsIArray array, Func <TGeckoObject, TWrapper> translator)
 {
     _array      = array;
     _translator = translator;
 }
Beispiel #6
0
        public static nsIArray GetProxy(Mono.WebBrowser.IWebBrowser control, nsIArray obj)
        {
            object o = Base.GetProxyForObject(control, typeof(nsIArray).GUID, obj);

            return(o as nsIArray);
        }
Beispiel #7
0
		public static nsIArray GetProxy (Mono.WebBrowser.IWebBrowser control, nsIArray obj)
		{
			object o = Base.GetProxyForObject (control, typeof(nsIArray).GUID, obj);
			return o as nsIArray;
		}