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; }
public static nsIArray GetProxy(Mono.WebBrowser.IWebBrowser control, nsIArray obj) { object o = Base.GetProxyForObject(control, typeof(nsIArray).GUID, obj); return(o as nsIArray); }
public static nsIArray GetProxy (Mono.WebBrowser.IWebBrowser control, nsIArray obj) { object o = Base.GetProxyForObject (control, typeof(nsIArray).GUID, obj); return o as nsIArray; }