基于C#的接口基础教程之六(4)
2024-07-21 02:17:52
供稿:网友
本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。下面是一个使用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 键停止。