/// <summary> /// Converts to COM object without null check /// </summary> /// <returns></returns> private object ToComObjectInternal() { var context = AutoJSContext.Current; if (context == null) { throw new Exception("AutoJSContext not set."); } { var jsObject = SpiderMonkey.JS_ValueToObject(context.ContextPointer, this); var guid = typeof(nsISupports).GUID; var pUnk = IntPtr.Zero; try { pUnk = Xpcom.XPConnect.Instance.WrapJS(context.ContextPointer, jsObject, ref guid); var comObj = Xpcom.GetObjectForIUnknown(pUnk); return(comObj); } finally { if (pUnk != IntPtr.Zero) { Marshal.Release(pUnk); } } } }
/// <summary> /// Converts to COM object without null check /// </summary> /// <param name="cx"></param> /// <returns></returns> private object ToComObjectInternal(IntPtr cx) { using (var context = new AutoJSContext(cx)) { var jsObject = SpiderMonkey.JS_ValueToObject(context.ContextPointer, this); var guid = typeof(nsISupports).GUID; var pUnk = IntPtr.Zero; try { pUnk = Xpcom.XPConnect.Instance.WrapJS(context.ContextPointer, jsObject, ref guid); var comObj = Xpcom.GetObjectForIUnknown(pUnk); return(comObj); } finally { if (pUnk != IntPtr.Zero) { Marshal.Release(pUnk); } } } }