请懂的朋友解释下这段代码,看的卡壳了,是有关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中就可以找到这些接口的定义
[解决办法]-------
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#只是把它进行了一个托管式的封装,实际上还得从内存读取。
[解决办法]还是先看看directshow相关书籍吧《DirectShow开发指南》
[解决办法]大家帮忙回复一次,谢谢了。如果懂的帮忙解释一下。
[解决办法]2. GUID是创建Filter或DMO时由开发人员生成的GUID,作为新Filter或DMO的唯一标识
3. 既做输入也接收输出
以前搞过一小段时间DirectShow,友情帮顶下