private static IPin?EnumPins(IBaseFilter filter, Func <PIN_INFO, bool> func) { IEnumPins?pins = null; IPin? ipin = null; try { filter.EnumPins(ref pins); int fetched = 0; while (pins?.Next(1, ref ipin, ref fetched) == 0) { if (fetched == 0) { break; } var info = new PIN_INFO(); try { ipin?.QueryPinInfo(info); var rc = func(info); if (rc) { return(ipin); } } finally { if (info.pFilter != null) { Marshal.ReleaseComObject(info.pFilter); } } } } catch { if (ipin != null) { Marshal.ReleaseComObject(ipin); } throw; } finally { if (pins != null) { Marshal.ReleaseComObject(pins); } } return(null); }
public static IPin FindPin(IBaseFilter filter, string name) { IEnumPins enumpins = null; IPin pin = null; try { filter.EnumPins(ref enumpins); int fetched = 0; while (enumpins.Next(1, pin, fetched) == 0) { if (fetched == 0) break; var info = new PIN_INFO(); try { } finally { if (pin != null) Marshal.ReleaseComObject(pin); if (info.Filter != null) Marshal.ReleaseComObject(info.Filter); } } } finally { } return null; }