有关 VFW.h关于 AVI stream Interface的几个问题! ( 积分: 50 )

  • 主题发起人 主题发起人 草原牧歌
  • 开始时间 开始时间

草原牧歌

Unregistered / Unconfirmed
GUEST, unregistred user!
/****** AVI Stream Interface *******************************************/
#undef INTERFACE
#define INTERFACE IAVIStream
DECLARE_INTERFACE_(IAVIStream, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IAVIStream methods ***
STDMETHOD(Create) (THIS_ LPARAM lParam1, LPARAM lParam2) PURE
STDMETHOD(Info) (THIS_ AVISTREAMINFOW FAR * psi, LONG lSize) PURE
STDMETHOD_(LONG, FindSample)(THIS_ LONG lPos, LONG lFlags) PURE
STDMETHOD(ReadFormat) (THIS_ LONG lPos,
LPVOID lpFormat, LONG FAR *lpcbFormat) PURE
STDMETHOD(SetFormat) (THIS_ LONG lPos,
LPVOID lpFormat, LONG cbFormat) PURE
STDMETHOD(Read) (THIS_ LONG lStart, LONG lSamples,
LPVOID lpBuffer, LONG cbBuffer,
LONG FAR * plBytes, LONG FAR * plSamples) PURE
STDMETHOD(Write) (THIS_ LONG lStart, LONG lSamples,
LPVOID lpBuffer, LONG cbBuffer,
DWORD dwFlags,
LONG FAR *plSampWritten,
LONG FAR *plBytesWritten) PURE
STDMETHOD(Delete) (THIS_ LONG lStart, LONG lSamples) PURE;
STDMETHOD(ReadData) (THIS_ DWORD fcc, LPVOID lp, LONG FAR *lpcb) PURE
STDMETHOD(WriteData) (THIS_ DWORD fcc, LPVOID lp, LONG cb) PURE
#ifdef _WIN32
STDMETHOD(SetInfo) (THIS_ AVISTREAMINFOW FAR * lpInfo,
LONG cbInfo) PURE;
#else
STDMETHOD(Reserved1) (THIS) PURE;
STDMETHOD(Reserved2) (THIS) PURE;
STDMETHOD(Reserved3) (THIS) PURE;
STDMETHOD(Reserved4) (THIS) PURE;
STDMETHOD(Reserved5) (THIS) PURE;
#endif
};
typedef IAVIStream FAR* PAVISTREAM;
[black][/black][purple]“DECLARE_INTERFACE_” 这个怎么理解?
我没搞过VC++:不理解 “DECLARE_INTERFACE_” 是什么!
是不是 #define DECLARE_INTERFACE_ public Interface
这样的意思? 那这个声明在哪里?
对于DECLARE_INTERFACE_(IAVIStream, IUnknown)这个
又怎么理解?
#undef INTERFACE //取消 INTERFACE 以前的定义
#define INTERFACE IAVIStream //宏定义 INTERFACE 为 IAVIStream
//以后任何出现 INTERFACE的地方都要替换为
//IAVIStream 但 我没看见有 INTERFACE出现过
//难道 #define 在这里有特殊含义?
DECLARE_INTERFACE_(IAVIStream, IUnknown) //定义了一个 多重继承的接口
//关键 IAVIStream 是什么 ,在哪里定义的?
以上问题是我看vfw.h时,难于看懂的地方,
我原本是搞delphi的,c语言都快忘光了,c++又没学过!
想做一个AVI的东西,不得不看起了msdn,而要看懂msdn中的一些声明只能去看
vc++的MFC中的源代码,真是痛苦啊,后悔当初没学vc++,现在只能临时抱佛脚了,
请诸位c++高手帮忙了,耽误各位的时间真是不好意思,再这里只能说声谢谢了![/purple]
 
/****** AVI Stream Interface *******************************************/
#undef INTERFACE
#define INTERFACE IAVIStream
DECLARE_INTERFACE_(IAVIStream, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IAVIStream methods ***
STDMETHOD(Create) (THIS_ LPARAM lParam1, LPARAM lParam2) PURE
STDMETHOD(Info) (THIS_ AVISTREAMINFOW FAR * psi, LONG lSize) PURE
STDMETHOD_(LONG, FindSample)(THIS_ LONG lPos, LONG lFlags) PURE
STDMETHOD(ReadFormat) (THIS_ LONG lPos,
LPVOID lpFormat, LONG FAR *lpcbFormat) PURE
STDMETHOD(SetFormat) (THIS_ LONG lPos,
LPVOID lpFormat, LONG cbFormat) PURE
STDMETHOD(Read) (THIS_ LONG lStart, LONG lSamples,
LPVOID lpBuffer, LONG cbBuffer,
LONG FAR * plBytes, LONG FAR * plSamples) PURE
STDMETHOD(Write) (THIS_ LONG lStart, LONG lSamples,
LPVOID lpBuffer, LONG cbBuffer,
DWORD dwFlags,
LONG FAR *plSampWritten,
LONG FAR *plBytesWritten) PURE
STDMETHOD(Delete) (THIS_ LONG lStart, LONG lSamples) PURE;
STDMETHOD(ReadData) (THIS_ DWORD fcc, LPVOID lp, LONG FAR *lpcb) PURE
STDMETHOD(WriteData) (THIS_ DWORD fcc, LPVOID lp, LONG cb) PURE
#ifdef _WIN32
STDMETHOD(SetInfo) (THIS_ AVISTREAMINFOW FAR * lpInfo,
LONG cbInfo) PURE;
#else
STDMETHOD(Reserved1) (THIS) PURE;
STDMETHOD(Reserved2) (THIS) PURE;
STDMETHOD(Reserved3) (THIS) PURE;
STDMETHOD(Reserved4) (THIS) PURE;
STDMETHOD(Reserved5) (THIS) PURE;
#endif
};
typedef IAVIStream FAR* PAVISTREAM;
[black][/black][purple]“DECLARE_INTERFACE_” 这个怎么理解?
我没搞过VC++:不理解 “DECLARE_INTERFACE_” 是什么!
是不是 #define DECLARE_INTERFACE_ public Interface
这样的意思? 那这个声明在哪里?
对于DECLARE_INTERFACE_(IAVIStream, IUnknown)这个
又怎么理解?
#undef INTERFACE //取消 INTERFACE 以前的定义
#define INTERFACE IAVIStream //宏定义 INTERFACE 为 IAVIStream
//以后任何出现 INTERFACE的地方都要替换为
//IAVIStream 但 我没看见有 INTERFACE出现过
//难道 #define 在这里有特殊含义?
DECLARE_INTERFACE_(IAVIStream, IUnknown) //定义了一个 多重继承的接口
//关键 IAVIStream 是什么 ,在哪里定义的?
以上问题是我看vfw.h时,难于看懂的地方,
我原本是搞delphi的,c语言都快忘光了,c++又没学过!
想做一个AVI的东西,不得不看起了msdn,而要看懂msdn中的一些声明只能去看
vc++的MFC中的源代码,真是痛苦啊,后悔当初没学vc++,现在只能临时抱佛脚了,
请诸位c++高手帮忙了,耽误各位的时间真是不好意思,再这里只能说声谢谢了![/purple]
 
昨天,又看了一下,恍然大悟!原来
在objbase.h下列定义:
#define DECLARE_INTERFACE(iface) interface iface
#define DECLARE_INTERFACE_(iface, baseiface) interface iface : public baseiface
与DECLARE_INTERFACE_(IAVIStream, IUnknown)
定义一替换,成为了如下形式:
interface IAVIStream : public IUnknown
与原来预想的没错!
 
接受答案了.
 
后退
顶部