当前位置:首页 > 网络编程 > WEB编程 > ASP.net > 基于C#的接口基础教程之六(3)

基于C#的接口基础教程之六(3)

点击次数:26 次 发布日期:2008-11-27 00:02:08 作者:源代码网
源代码网推荐      声明 COM 接口
源代码网推荐  
源代码网推荐    COM 接口在 C# 中表示为具有 ComImport 和 Guid 属性的接口。它不能在其基接口列表中包含任何接口,而且必须按照方法在 COM 接口中出现的顺序声明接口成员函数。
源代码网推荐  
源代码网推荐    在 C# 中声明的 COM 接口必须包含其基接口的所有成员的声明,IUnknown 和 IDispatch 的成员除外(.NET 框架将自动添加这些成员)。从 IDispatch 派生的 COM 接口必须用 InterfaceType 属性予以标记。
源代码网推荐  从 C# 代码调用 COM 接口方法时,公共语言运行库必须封送与 COM 对象之间传递的参数和返回值。对于每个 .NET 框架类型均有一个默认类型,公共语言运行库将使用此默认类型在 COM 调用间进行封送处理时封送。例如,C# 字符串值的默认封送处理是封送到本机类型 LPTSTR(指向 TCHAR 字符缓冲区的指针)。可以在 COM 接口的 C# 声明中使用 MarshalAs 属性重写默认封送处理。
源代码网推荐  
源代码网推荐    在 COM 中,返回成功或失败的常用方法是返回一个 HRESULT,并在 MIDL 中有一个标记为"retval"、用于方法的实际返回值的 out 参数。在 C#(和 .NET 框架)中,指示已经发生错误的标准方法是引发异常。
源代码网推荐  默认情况下,.NET 框架为由其调用的 COM 接口方法在两种异常处理类型之间提供自动映射。
源代码网推荐  
源代码网推荐    返回值更改为标记为 retval 的参数的签名(如果方法没有标记为 retval 的参数,则为 void)。
源代码网推荐  
源代码网推荐    标记为 retval 的参数从方法的参数列表中剥离。
源代码网推荐  
源代码网推荐    任何非成功返回值都将导致引发 System.COMException 异常。
源代码网推荐  
源代码网推荐    此示例显示用 MIDL 声明的 COM 接口以及用 C# 声明的同一接口(注意这些方法使用 COM 错误处理方法)。
源代码网推荐  
源代码网推荐    下面是接口转换的C#程序:
源代码网推荐  
源代码网推荐  using System.Runtime.InteropServices;
源代码网推荐  // 声明一个COM接口 IMediaControl
源代码网推荐  [Guid("56A868B1-0AD4-11CE-B03A-0020AF0BA770"),
源代码网推荐  InterfaceType(ComInterfaceType.InterfaceIsDual)]
源代码网推荐  interface IMediaControl // 这里不能列出任何基接口
源代码网推荐  {
源代码网推荐  void Run();
源代码网推荐  void Pause();
源代码网推荐  void Stop();
源代码网推荐  void GetState( [In] int msTimeout, [Out] out int pfs);
源代码网推荐  void RenderFile(
源代码网推荐  [In, MarshalAs(UnmanagedType.BStr)] string strFilename);
源代码网推荐  void AddSourceFilter(
源代码网推荐  [In, MarshalAs(UnmanagedType.BStr)] string strFilename,
源代码网推荐  [Out, MarshalAs(UnmanagedType.Interface)] out object ppUnk);
源代码网推荐  [return : MarshalAs(UnmanagedType.Interface)]
源代码网推荐  object FilterCollection();
源代码网推荐  [return : MarshalAs(UnmanagedType.Interface)]
源代码网推荐  object RegFilterCollection();
源代码网推荐  void StopWhenReady();
源代码网推荐  }
源代码网推荐  
源代码网推荐    若要防止 HRESULT 翻译为 COMException,请在 C# 声明中将 PreserveSig(true) 属性附加到方法。
源代码网推荐  


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华