Example #1
0
    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);
    }
Example #2
0
        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;
        }