一个接口定义的简单示例

示例:一个开源的MPEG2解码器的接口源代码如下
interface  IMpeg2DecFilter:
  
public  IUnknown
{
  STDMETHOD(SetDeinterlaceMethod) (THIS_ 
int  iMethod) PURE;
  STDMETHOD_(
int , GetDeinterlaceMethod) (THIS) PURE;

  
//  Brightness: -255.0 to 255.0, default 0.0
  
//  Contrast: 0.0 to 10.0, default 1.0
  
//  Hue: -180.0 to +180.0, default 0.0
  
//  Saturation: 0.0 to 10.0, default 1.0
  STDMETHOD(SetBrightness) (THIS_  double  bright) PURE;
  STDMETHOD(SetContrast) (THIS_ 
double  cont) PURE;
  STDMETHOD(SetHue) (THIS_ 
double  hue) PURE;
  STDMETHOD(SetSaturation) (THIS_ 
double  sat) PURE;
  STDMETHOD_(
double , GetBrightness) (THIS) PURE;
  STDMETHOD_(
double , GetContrast) (THIS) PURE;
  STDMETHOD_(
double , GetHue) (THIS) PURE;
  STDMETHOD_(
double , GetSaturation) (THIS) PURE;

  STDMETHOD(EnableForcedSubtitles) (THIS_ 
bool  fEnable) PURE;
  STDMETHOD_(
bool , IsForcedSubtitlesEnabled) (THIS) PURE;

  STDMETHOD(EnablePlanarYUV) (THIS_ 
bool  fEnable) PURE;
  STDMETHOD_(
bool , IsPlanarYUVEnabled) (THIS) PURE;
};
在C#中的定义:
None.gif [ComImport,Guid( " B31FB86F-46C4-48b0-BB2B-6935CF404E35 " ),                   
None.gif            InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
None.gif            
protected   interface  IMpeg2DecFilter
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {    
InBlock.gif            
int SetDeinterlaceMethod(int iMethod);        
InBlock.gif            [PreserveSig]
InBlock.gif            
int GetDeinterlaceMethod();
InBlock.gif            
int SetBrightness(double brit);
InBlock.gif            
int SetContrast(double cont);
InBlock.gif            
int SetHue(double sat);            
InBlock.gif            
int SetSaturation(double hue);
InBlock.gif            [PreserveSig]
InBlock.gif            
double GetBrightness();
InBlock.gif            [PreserveSig]
InBlock.gif            
double GetContrast();
InBlock.gif            [PreserveSig]
InBlock.gif            
double GetHue();
InBlock.gif            [PreserveSig]
InBlock.gif            
double GetSaturation();            
InBlock.gif            
int EnableForcedSubtitles(bool fEnable);
InBlock.gif            [PreserveSig]
InBlock.gif            
bool IsForcedSubtitlesEnabled();            
InBlock.gif            
int EnablePlanarYUV(bool fEnable);
InBlock.gif            [PreserveSig]
InBlock.gif            
bool IsPlanarYUVEnabled();
ExpandedBlockEnd.gif        }
需要注意的是:ComInterfaceType需要指定为InterfaceIsIUnknown,如果指定为InterfaceIsDual,虽然也可以执行,但是接口之间的顺序为变为乱序,出现调用不正确.第二个地方是对于接口中定义的返回值不是HRESULT的函数,需要加上PreserveSig指定不进行转换.

转载于:https://www.cnblogs.com/haijer/archive/2005/09/08/232242.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值