首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请懂的友人解释下这段代码,看的卡壳了,是有关directshow的

2014-01-17 
请懂的朋友解释下这段代码,看的卡壳了,是有关directshow的。// -----------------------------------------

请懂的朋友解释下这段代码,看的卡壳了,是有关directshow的。

// ---------------------------------------------------------------------------------------

[ComVisible(true), ComImport,
Guid("C6E13340-30AC-11d0-A18C-00A0C9118956"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IAMStreamConfig
{
[PreserveSig]
int SetFormat(
[In, MarshalAs(UnmanagedType.LPStruct)]AMMediaTypepmt );

[PreserveSig]
int GetFormat(
[Out] out IntPtrpmt );

[PreserveSig]
int GetNumberOfCapabilities( out int piCount, out int piSize );

[PreserveSig]
int GetStreamCaps( int iIndex,
//[Out, MarshalAs(UnmanagedType.LPStruct)]out AMMediaTypeppmt,
[Out] out IntPtr pmt,
[In]IntPtrpSCC );
    }

[解决办法]
 1.可见是为了整个类的公共访问,非托管不可见,然托管设置为可见了,用托管则可见,非托管如果不设置则不可见
 2.msdn上结合C.h文件可查的
 3.in表示这个参数是传入到某个函数里,是函数内部所需要的数据。out表示这个参数传给函数之后,函数会对这个参数进行加工处理,处理之后就是你需要的数据,也就是相当于是从函数内部出来的才是有效数据,所以是out。
 4.相当于操作dll差不多,C# 的DLL集成了COM+/ATL/lib/SRC等等。具体参照各个范例
[解决办法]
接口都是c++ directshow库中定义好的,c#封装这些库中的接口,所以GUID都是固定的,可以在msdn中直接查找此接口,然后在指定的header中就可以找到这些接口的定义
[解决办法]
引用:
2.msdn上结合C.h文件可查的
具体在哪里能找到?

-------
msdn上可以找到啊,上面都说了。
c.h重名了,可以换成 strmif.h .元定义是:    
    MIDL_INTERFACE("C6E13340-30AC-11d0-A18C-00A0C9118956")
    IAMStreamConfig : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE SetFormat( 
            /* [in] */ AM_MEDIA_TYPE *pmt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFormat( 
            /* [out] */ 
            __out  AM_MEDIA_TYPE **ppmt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetNumberOfCapabilities( 
            /* [out] */ 
            __out  int *piCount,
            /* [out] */ 
            __out  int *piSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetStreamCaps( 
            /* [in] */ int iIndex,
            /* [out] */ 
            __out  AM_MEDIA_TYPE **ppmt,
            /* [out] */ 
            __out  BYTE *pSCC) = 0;
        
    };

 C#只是把它进行了一个托管式的封装,实际上还得从内存读取。
[解决办法]
引用:
谢谢楼上回答,
1.有没有具体的相应链接,请发过来。
2.还有就是比如装个wdm类型的采集卡,然后装驱动,哪些驱动怎么封装到directshow里,然后怎么和c++或c#进行交互。

还是先看看directshow相关书籍吧《DirectShow开发指南》
[解决办法]
大家帮忙回复一次,谢谢了。如果懂的帮忙解释一下。
[解决办法]
2. GUID是创建Filter或DMO时由开发人员生成的GUID,作为新Filter或DMO的唯一标识
3. 既做输入也接收输出
以前搞过一小段时间DirectShow,友情帮顶下

热点排行