错误信息如下:其他信息: 接口 DShow.IVMRImagePresenterConfig 的 QueryInterface 失败。

解决方案 »

  1.   

    我反编译出DirectShowLib的这部分代码是这样:[ComImport, Guid("9F3A1C85-8555-49BA-935F-BE5B5B29D178"), InterfaceType(1)]
    public interface IVMRImagePresenterConfig
    {
          [MethodImpl(3 | ((int) MethodImplOptions.InternalCall))]
          void SetRenderingPrefs([In] uint dwRenderFlags);
          [MethodImpl(3 | ((int) MethodImplOptions.InternalCall))]
          void GetRenderingPrefs(out uint dwRenderFlags);
    }
    [ComImport, ComConversionLoss, InterfaceType(1), Guid("E6F7CE40-4673-44F1-8F77-5499D68CB4EA")]
    public interface IVMRImagePresenterExclModeConfig : IVMRImagePresenterConfig
    {
          [MethodImpl(3 | ((int) MethodImplOptions.InternalCall))]
          void SetRenderingPrefs([In] uint dwRenderFlags);
          [MethodImpl(3 | ((int) MethodImplOptions.InternalCall))]
          void GetRenderingPrefs(out uint dwRenderFlags);
          [MethodImpl(3 | ((int) MethodImplOptions.InternalCall))]
          void SetXlcModeDDObjAndPrimarySurface([In] ref uint lpDDObj, [In] ref uint lpPrimarySurf);
          [MethodImpl(3 | ((int) MethodImplOptions.InternalCall))]
          void GetXlcModeDDObjAndPrimarySurface([Out] IntPtr lpDDObj, [Out] IntPtr lpPrimarySurf);
    }
     
    而我写的代码反编译出来是这样:
    [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), ComVisible(true), Guid("9f3a1c85-8555-49ba-935f-be5b5b29d178")]
    public interface IVMRImagePresenterConfig
    {
          [PreserveSig]
          int SetRenderingPrefs([In] int dwRenderFlags);
          [PreserveSig]
          int GetRenderingPrefs(out int dwRenderFlags);
    }
    [ComImport, ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("e6f7ce40-4673-44f1-8f77-5499d68cb4ea")]
    public interface IVMRImagePresenterExclModeConfig : IVMRImagePresenterConfig
    {
          [PreserveSig]
          int SetXlcModeDDObjAndPrimarySurface([In] object lpDDObj, [In] object lpPrimarySurf);
          [PreserveSig]
          int GetXlcModeDDObjAndPrimarySurface(out object lpDDObj, out object lpPrimarySurf);
    }
     
    最大差别就是我的IVMRImagePresenterExclModeConfig 里面没有列出IVMRImagePresenterConfig中的方法。
    大家看看我应该怎么做。本来想用DirectShow的,但是传递DirectDraw.device他用的是ref uint类型,我不知道怎么传递进去。
      

  2.   

    上面是我反编译出来的代码,我写的代码是 #region IVMRImagePresenterConfig
    [ComVisible(true), ComImport,
    Guid("9f3a1c85-8555-49ba-935f-be5b5b29d178"),
    InterfaceType(1)]// ComInterfaceType.InterfaceIsIUnknown )]
    public interface IVMRImagePresenterConfig
    {
    [PreserveSig]
    int SetRenderingPrefs([In] uint dwRenderFlags); [PreserveSig]
    int GetRenderingPrefs([Out] out uint dwRenderFlags);
    };
    #endregion #region IVMRImagePresenterExclModeConfig
    [ComVisible(true), ComImport,//ComConversionLoss,
    Guid("e6f7ce40-4673-44f1-8f77-5499d68cb4ea"),
    InterfaceType( 1)]//ComInterfaceType.InterfaceIsIUnknown )]
    public interface IVMRImagePresenterExclModeConfig : IVMRImagePresenterConfig
    { [PreserveSig]
    int SetXlcModeDDObjAndPrimarySurface([In] object lpDDObj,[In] object lpPrimarySurf); [PreserveSig]
    int GetXlcModeDDObjAndPrimarySurface([Out] out object lpDDObj,[Out] out object lpPrimarySurf);
    };
    #endregion调用代码:
    IVMRImagePresenterExclModeConfig ipemc=(IVMRImagePresenterExclModeConfig)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID.AllocPresenterDDXclMode));
    hr=ipemc.SetXlcModeDDObjAndPrimarySurface(device,surface1);
    Debug.WriteLine("SetXlcModeDDObjAndPrimarySurface hr="+hr);
    hr=ipemc.SetRenderingPrefs(0);
    Debug.WriteLine("SetRenderingPrefs hr="+hr);
    IVMRWindowlessControl wc=(IVMRWindowlessControl)ipemc;
    wc.SetVideoClippingWindow(this.Handle);现在调用到:hr=ipemc.SetRenderingPrefs(0);
    就说:接口 DShow.IVMRImagePresenterConfig 的 QueryInterface 失败。
      

  3.   

    参考--COM组件对象与.NET类对象的相互转换:
    http://comcamp.myrice.com/techarticles/com/2013.htm
      

  4.   

    http://blog.csdn.net/xxcc/archive/2001/10/18/7283.aspx
      

  5.   

    cancersyf(fengzhimei) 
         这篇文章好像是跟我问的这个没有大关系呀。:)
      

  6.   

    hivak47(比尔) 您这个和 cancersyf(fengzhimei) 是一篇文章:)