COM 互操作 - 第一部分”示例

// 版权所有(C) Microsoft Corporation。保留所有权利。
// 此代码的发布遵从
// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
//
//版权所有(C) Microsoft Corporation。保留所有权利。

// interop2.cs
// 编译时使用 “csc interop2.cs”  
using System;
using System.Runtime.InteropServices;

namespace QuartzTypeLib
{
    // 将 IMediaControl 声明为一个从 IDispatch 接口派生的
    // COM 接口:
    [Guid("56A868B1-0AD4-11CE-B03A-0020AF0BA770"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    interface IMediaControl   // 此处不能列出任何基接口
    {
        // 注意 IUnknown 接口成员未在此处列出:

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();
    }
    // 将 FilgraphManager 声明为 COM 组件类:
    [ComImport, Guid("E436EBB3-524F-11CE-9F53-0020AF0BA770")]
    class FilgraphManager   // 此处不能有基类或
        // 接口列表。
    {
        // 此处不能有任何成员
        // 注意,C# 编译器将为您添加默认构造函数
        //(不带参数)。
    }
}

class MainClass
{
    /**********************************************************
    摘要:此方法收集要显示的 AVI 的文件名,
    然后创建 Quartz COM 对象的实例。
    为了显示 AVI,程序对
    IMediaControl 调用 RenderFile 和 Run。Quartz 使用自己的线程和窗口来显示
    AVI。主线程阻塞在 ReadLine 上,直到用户按
    Enter 键为止。
        输入参数:要显示的 avi 文件的位置
        返回值:void
    *************************************************************/

public static void Main(string[] args)
    {
        // 检查用户是否传入了文件名:
        if (args.Length != 1)
        {
            DisplayUsage();
            return;
        }

if (args[0] == "/?")
        {
            DisplayUsage();
            return;
        }

String filename = args[0];

// 检查文件是否存在
        if (!System.IO.File.Exists(filename))
        {
            Console.WriteLine("File " + filename + " not found.");
            DisplayUsage();
            return;
        }

// 创建 Quartz 的实例
        // (Calls CoCreateInstance(E436EBB3-524F-11CE-9F53-0020AF0BA770,
        //  NULL, CLSCTX_ALL, IID_IUnknown,
        //  &graphManager).):
        try
        {
            QuartzTypeLib.FilgraphManager graphManager =
                new QuartzTypeLib.FilgraphManager();

// IMediaControl 接口的 QueryInterface:
            QuartzTypeLib.IMediaControl mc =
                (QuartzTypeLib.IMediaControl)graphManager;

// 对 COM 接口调用某些方法。
            // 将文件传递给 COM 对象上的 RenderFile 方法。
            mc.RenderFile(filename);
        
            // 显示文件。
            mc.Run();
        }
        catch(Exception ex)
        {
            Console.WriteLine("Unexpected COM exception: " + ex.Message);
        }
        // 等待完成。
        Console.WriteLine("Press Enter to continue.");
        Console.ReadLine();
    }

private static void DisplayUsage()
    {
        // 用户未提供足够的参数。
        // 显示用法。
        Console.WriteLine("VideoPlayer: Plays AVI files.");
        Console.WriteLine("Usage: VIDEOPLAYER.EXE filename");
        Console.WriteLine("where filename is the full path and");
        Console.WriteLine("file name of the AVI to display.");
    }
}

时间: 2024-11-11 18:23:38

COM 互操作 - 第一部分”示例的相关文章

ylbtech-LanguageSamples-COMInteropPart1(COM 互操作 - 第一部分)

ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-COMInteropPart1(COM 互操作 - 第一部分) 1.A,示例(Sample) 返回顶部 “COM 互操作 - 第一部分”示例 本示例演示了 C# 程序如何能够与非托管 COM 组件进行互操作. 安全说明 提供此代码示例是为了阐释一个概念,它并不代表最安全的编码实践,因此不应在应用程序或网站中使用此代码示例. 对于因将此代码示例用于其他用途而发生的偶然或必然损害,Micr

创建ArcGIS API for JavaScript的第一个示例程序

原文:创建ArcGIS API for JavaScript的第一个示例程序 在上一篇博客中已经介绍了如何搭建ArcGIS API for JavaScript开发环境,如果您还没有搭建好开发环境的话,参考博客:http://blog.csdn.net/zdw_wym/article/details/48678913. 如果开发环境搭建好了的话,那么今天我们继续来搭建我们的第一个ArcGIS API for JavaScript应用程序. 下面首先将代码贴出来,复制到VS2012中新建的html

DWR第一个示例

DWR是一种Ajax实现,他就是封装了Ajax基础代码的一个框架. 下面首先看一个DWR的小示例,看一下DWR的具体功能. 使用DWR框架第一步也是先导入相应的jar包.首先导入dwr.jar.然后导入他依赖的jar包,包括log4j.jar.common-logging.jar等 然后再web.xml中进行配置. <servlet> <servlet-name>dwr_servlet</servlet-name> <servlet-class>org.di

Spring Roo 实站( 一 )部署安装 &amp; 第一个示例程序

转自:http://blog.csdn.net/jun55xiu/article/details/9380213 一:安装 注:可以参与官网spring-roo: static.springsource.org/spring-roo/reference/html/intro.html#intro-exploring-sampleROO_OPTS http://static.springsource.org/spring-roo/reference/html/intro.html#intro-ex

2018-06-26 解谜计算机科学第一章示例汉化尝试

知乎原链 示例程序来源: 解谜计算机科学(1) 比如我们想要表达一个"风扇控制器",有了它之后,风扇的转速总是当前气温的两倍.这个"当前气温"就是一个未知数. 原例程: t -> t*2 f = t -> t*2 f(t) = t*2 个人觉得相对抽象, 和数学表达比较近. 猜想选择t作变量名是因为temperature. 汉化尝试如下: 气温 -> 气温*2 风扇转速 = 气温 -> 气温*2 风扇转速(气温) = 气温*2 比如,如果我想

hibernate(二)annotation第一个示例

一.在数据库中创建teacher表(数据库hibernate) create table teache( id int auto_increment primary key, name varchar(20), title varchar(20) ); 二.创建model 在cn.orlion.hibernate.model下创建实体类Teacher(注意添加注解,一开始只添加了@Id,然后抛出异常,后来又加上了@GeneratedValue(strategy = GenerationType.

jeecg开发平台第一个示例遇到的错误

根据开发文档设计表,建表,生成代码成功后,登录到管理界面配置菜单: 新建一级菜单为订单管理,接着在下面创建了一个子菜单为:订单列表,对应的菜单地址为:orderController.do?order,如图: 之后重新登录系统却死活也看不到新建的菜单,仔细查看文档发现需要到角色管理中给管理员角色增加这个菜单的权限,如图: 接着现登录系统即看到刚才增加的菜单,如图: 接着点击"订单列表"想进入界面,却发现弹出错误提示,并且后台提示: [org.springframework.web.ser

Selenium用Python的第一个示例 (Windows系统)

Install Python (https://www.python.org/),download the latest Python version Configure environment variables. (Example), I installed Python under /installation folder with Python 3.5.2. The path set is as follows: D:\installation\Python3.5.2;D:\instal

手把手教你ranorex_android自动化测试第一个示例

要说android的自动化,那真是折腾死我了,从早期的monkeyrunner,到后来的robotium,再到最新的uiautomator,各有各的问题,总之性价比都不够高,不太适合我的使用场景.于是不愿意将研究结果投入实践,一直等待.今年的适配问题越发突出,再不自动化,回归就该搞死人了. 于是最后研究比对instrumetation和uiautomator,终于确定了uiautomator方案,其实也是勉为其难,不过总算也是可以实现的.先准备好脚本,批量修改了所有布局文件,增加了content