日期:2014-05-17  浏览次数:21011 次

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

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

[PreserveSig]
int GetFormat(
[Out] out IntPtr pmt );

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

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

------解决方案--------------------
 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] */