帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统v4.6
栏 目:
 
您的位置:首页 > 技术文档 > ASP.NET编程 >
基于C#的接口基础教程之六(3)
作者:黎宇/Yesky 发布时间:2005-03-12 来源:ASPCOOL
     声明 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) 属性附加到方法。
  

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·.NET框架中基于角色的安全性(2)  (2005-03-12)
 ·.NET框架中基于角色的安全性(1)  (2005-03-12)
 ·基于C#的接口基础教程之六(5)  (2005-03-12)
 ·基于C#的接口基础教程之六(4)  (2005-03-12)
 ·.NET框架中基于角色的安全性(3)  (2005-03-12)
 ·基于wap协议的wml开发示例,在Op  (2005-03-12)
 ·基于Java&XML技术构建植物病虫害  (2005-03-12)
 ·使用J2EE建立基于XML的网络服务  (2005-03-12)
 ·基于RPC 0.8的Java API for XML最  (2005-03-12)
 ·用JDBC开发基于客户/服务器模式的  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·帝国网站管理系统采集使用教程
·帝国网站管理系统模板制作教程
·帝国CMS模板下载
·Discuz6.0.1UC版通行证发布
·帝国网站管理系统之网站迁移教程
·帝国网站管理系统实例入门教程下载
·《帝国网站管理系统》实例入门教程
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统