/// <summary> /// ピンの検索 /// </summary> /// <param name="filter">フィルタ</param> /// <param name="name">ピン名称</param> /// <returns> /// 見つかった場合は、ピンの IPin インターフェースを返します。 /// 見つからなかった場合は、 null を返します。 /// </returns> 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, ref pin, ref fetched) == 0) { if (fetched == 0) { break; } var info = new PIN_INFO(); try { pin.QueryPinInfo(info); if (info.achName == name) { return(pin); } if (pin != null) { Marshal.ReleaseComObject(pin); } pin = null; } finally { if (info.pFilter != null) { Marshal.ReleaseComObject(info.pFilter); } } } } catch { if (pin != null) { Marshal.ReleaseComObject(pin); } throw; } finally { if (enumpins != null) { Marshal.ReleaseComObject(enumpins); } } return(null); }
/// <summary> /// ピン一覧の取得 /// </summary> /// <param name="filter">対象のフィルタ</param> /// <returns> /// 取得したピン情報のコレクションを返します。 /// </returns> public static List <CxPinInfo> GetPinList(IBaseFilter filter) { var result = new List <CxPinInfo>(); IEnumPins enumpins = null; try { filter.EnumPins(ref enumpins); while (true) { IPin pin = null; int fetched = 0; if (enumpins.Next(1, ref pin, ref fetched) < 0) { break; } if (fetched == 0) { break; } var info = new PIN_INFO(); try { pin.QueryPinInfo(info); var dpi = new CxPinInfo(info.achName, info.dir); result.Add(dpi); } finally { if (info.pFilter != null) { Marshal.ReleaseComObject(info.pFilter); } if (pin != null) { Marshal.ReleaseComObject(pin); } pin = null; } } } finally { if (enumpins != null) { Marshal.ReleaseComObject(enumpins); } } return(result); }
/// <summary> /// ピン名称の取得 /// </summary> /// <param name="Pin">ピン</param> /// <returns> /// ピン名称を返します。 /// </returns> public static string GetPinName(IPin Pin) { var info = new PIN_INFO(); try { Pin.QueryPinInfo(info); return(info.achName); } finally { if (info.pFilter != null) { Marshal.ReleaseComObject(info.pFilter); } } }