C #: Как использовать directshow.net, чтобы показать этот диалог? - PullRequest
1 голос
/ 21 января 2011

Как вызвать этот диалог, используя Directshow.net?

График фильтра

Ответы [ 2 ]

5 голосов
/ 18 февраля 2011

Примерно так будет работать, если у вас есть ссылка на IBaseFilter:

[DllImport("oleaut32.dll", CharSet = CharSet.Auto)]
    internal static extern int OleCreatePropertyFrame(
        IntPtr hwndOwner,
        uint x, uint y,
        [MarshalAs(UnmanagedType.LPWStr)]
        string caption,
        uint objectCount,
        [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.IUnknown)]
        object[] lplpUnk,
        int cPages,
        IntPtr pageClsID,
        Guid lcid,
        uint dwReserved,
        IntPtr lpvReserved);

    public void DisplayPropertyPages(Form form, IBaseFilter filter)
    {
            var propertyPages = filter as ISpecifyPropertyPages;
            DsCAUUID pages;
            FilterInfo info;
            int hr = filter.QueryFilterInfo(out info);
            DsError.ThrowExceptionForHR(hr);
            if (propertyPages == null)
            {
                throw new ApplicationException("IBaseFilter doesn't implement ISpecifyPropertyPages");
            }
            hr = propertyPages.GetPages(out pages);
            DsError.ThrowExceptionForHR(hr);
            var filters = new IBaseFilter[1];
            filters[0] = filter;
            hr = OleCreatePropertyFrame(form.Handle, 0, 0, info.achName, 1, filters,
                pages.cElems, pages.pElems, Guid.Empty, 0, IntPtr.Zero);
            Marshal.FreeCoTaskMem(pages.pElems);
            DsError.ThrowExceptionForHR(hr);
    }
1 голос
/ 24 августа 2014

Пожалуйста, проверьте описание OleCreatePropertyFrame () в MSDN.

Guid lcid недействителен.Результат: Помощник по управляемой отладке 'PInvokeStackImbalance' обнаружил проблему в 'D: \ CVS \ Dev \ Filters \ H264 \ H264mfxEncoder \ Samples \ C # \ H264EncoderTest \ bin \ Debug \ H264EncoderTest.vshost.exe'.Дополнительная информация: вызов функции PInvoke 'H264EncoderTest! H264EncoderTest.CGraph :: OleCreatePropertyFrame' нарушил балансировку стека.Это вероятно потому, что управляемая подпись PInvoke не совпадает с неуправляемой целевой подписью.Убедитесь, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи.

Должно быть: uint lcid и hr = OleCreatePropertyFrame (form.Handle, 0, 0, info.achName, 1, filters, pages.cElems, pages.pElems, 0, 0, IntPtr.Zero);

...