基于C#的接口基礎(chǔ)教程之六(4)
2024-07-21 02:17:52
供稿:網(wǎng)友
本文來源于網(wǎng)頁設(shè)計愛好者web開發(fā)社區(qū)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 //此類不能再繼承其它基類或接口
{
//這里不能有任何代碼 ,系統(tǒng)自動增加一個缺省的構(gòu)造函數(shù)
}
}
class mainclass
{
public static void main(string[] args)
{
//命令行參數(shù):
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;
// 調(diào)用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 鍵停止。