基于C#的接口基础教程之六(4)
下面是一个使用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 键停止。