主页 > 编程资料 > C# >
发布时间:2015-09-26 作者:网络 阅读:235次
下面是一个使用C# 映射媒体播放机COM 对象的程序。
  
    程序清单2 DemonCOM.cs
  
  using System;
  using System.Runtime.InteropServices;
  namespace QuartzTypeLib
  {
  //声明一个COM接口 IMediaControl,此接口来源于媒体播放机COM类
  [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(,',',');
  }
  //声明一个COM类:
  [ComImport, Guid("E436EBB3-524F-11CE-9F53-0020AF0BA770")]
  class FilgraphManager //此类不能再继承其它基类或接口
  {
  //这里不能有任何代码 ,系统自动增加一个缺省的构造函数
  }
  }
  class MainClass
  {
  public static void Main(string[] args)
  {
  //命令行参数:
  if (args.Length != 1)
  {
  DisplayUsage(,',',');
  return;
  }
  String filename = args[0];
  if (filename.Equals("/?"))
  {
  DisplayUsage(,',',');
  return;
  }
  // 声明FilgraphManager的实类对象:
  QuartzTypeLib.FilgraphManager graphManager =new QuartzTypeLib.FilgraphManager(,',',');
  //声明IMediaControl的实类对象::
  QuartzTypeLib.IMediaControl mc =(QuartzTypeLib.IMediaControl)graphManager;
  // 调用COM的方法:
  mc.RenderFile(filename,',',');
  //运行文件.
  mc.Run(,',',');
  //暂借停.
  Console.WriteLine("Press Enter to continue.",',',');
  Console.ReadLine(,',',');
  }
  private static void DisplayUsage()
  { // 显示
  Console.WriteLine("媒体播放机: 播放 AVI 文件.",',',');
  Console.WriteLine("使用方法: VIDEOPLAYER.EXE 文件名",',',');
  }
  }
  
    运行示例:
  
    若要显示影片示例 Clock.avi,请使用以下命令:
  
  interop2 %windir%\clock.avi
  
    这将在屏幕上显示影片,直到按 ENTER 键停止。
关键字词: