zoukankan      html  css  js  c++  java
  • AllInOne Code Framework(AIO): 如何编写VC++代码来使用COM组件 (How to use COM in a VC++ client)

    本文介绍如何编写VC++代码来使用COM组件。文章中所用到的example为All-In-One Code Framework 的CppCOMClient和MFCCOMClient示例:

    http://cfx.codeplex.com/

    为了帮助读者更快地体会到使用VC++编写COM client的效果,我建议您从上诉链接中下载最新的release,并按照如下步骤搭一个简单的测试环境:

    Step1. 使用Visual Studio 2008打开All-In-One Code Framework(AIO)的solution文件(Visual Studio需要run as admin)。

    Step2. Build其中的CppCOMClient和MFCCOMClient示例。由于项目依赖性的设置,这两个VC++ example所依赖于的COM组件(CSDllCOMServer, ATLDllCOMServer, ATLExeCOMServer)也会被编译并注册。

    Step3. 直接运行CppCOMClient,并得到如下输出。CppCOMClient演示的是使用native C++来创建和使用进程内COM组件。这个COM组件既可以是用native代码写的,也可以是用.NET语言写的。

    CppCOMClient Output

    Step4. 直接运行MFCCOMClient,并得到如下输出。MFCCOMClient演示的是使用MFC的class wizard来创建并使用一个进程外的COM组件。

    MFCCOMClient Output

    简单的测试到此结束。下面我们来看看编写一个VC++的程序来使用COM组件的一般方法:

    方法一:直接使用COM API,例如,CoCreateInstance以及IDispatch接口中定义的方法GetIDsOfNames,Invoke来创建和使用COM组件。当然,前提是那个COM组件支持IDispatch。AIO/CppCOMClient/RawAPI.cpp是该方法所对应的例子。

    方法二:使用VC++的#import directive,导入目标COM组件的type library并自动生成一套包装好的强类型的类和智能指针。这极大程度地方便了开发人员,因为生成的类和智能指针将复杂的COM API,类型转换等内容都隐藏了起来,同时开发者还可以受益于Visual Studio的intellisense。AIO/CppCOMClient/ImportDirective.cpp是该方法所对应的例子。另外,值得注意的是,这个例子演示了使用一个.NET 写的COM组件(CSDllCOMServer)。对于.NET写的COM组件,我们额外需要#import mscorlib.tlb。

    方法三:如果您开发的程序支持MFC,那您将更大程度地得益于MFC强大的class wizard。这个class wizard将方法二中的#import directive都封装隐藏了。您只需轻点几下鼠标,便可以无缝透明地创建和使用COM组件,就好像他是一个普通的class一般。

  • 相关阅读:
    (原创)如何利用UDP协议封装一个数据包
    <acarousel> 轮播图片无法触屏滑动
    Groovy开发语言
    关于ViewStub标签
    关键字transient和Volatile
    Android中Activity启动模式
    Android 开源项目分类汇总
    AtomicInteger的并发处理
    Cygwin: died waiting for dll loading (转载)
    Android知识点(C2DM)
  • 原文地址:https://www.cnblogs.com/Jialiang/p/CppCOMClient.html
Copyright © 2011-2022 走看看