private void Initialize(out IntPtr phwnd, IntPtr hParent, int x, int y, int nWidth, int nHeight, int dwStyle) { object factoryObject = null; object managerObject = null; try { var hr = ClassFactory.GetClassFactory(ref CLSID_MediaWindowManager, ref ClassFactory.IID_ClassFactory, out factoryObject); Marshal.ThrowExceptionForHR(hr); var factory = (IClassFactory)factoryObject; var iidMediaWindow = typeof(IMediaWindowManager).GUID; hr = factory.CreateInstance(null, ref iidMediaWindow, out managerObject); Marshal.ThrowExceptionForHR(hr); _manager = (IMediaWindowManager)managerObject; managerObject = null; Marshal.ThrowExceptionForHR(_manager.CreateMediaWindow(out phwnd, hParent, x, y, nWidth, nHeight, dwStyle)); } finally { if (factoryObject != null) { Marshal.FinalReleaseComObject(factoryObject); } if (managerObject != null) { Marshal.FinalReleaseComObject(managerObject); } } }
private void Dispose(bool disposing) { if (disposing && _manager != null) { _manager.SetRunning(false, null, null, null); Marshal.FinalReleaseComObject(_manager); _manager = null; } }