第一个例子展示的是单接口COM对象

转载 2012年03月31日 08:29:30
用例子代码总结上述内容
    下面用两个例子演示本文所讲的COM概念。代码中还包含了本文的例子工程。
使用单接口COM对象
    第一个例子展示的是单接口COM对象。这可能是你碰到得最简单的例子。它使用外壳中
的活动桌面组件对象类(CLSID_ActiveDesktop)来获得当前桌面墙纸的文件名。请确认系统中安装了活动桌面(Active Desktop)。
以下是编程步骤:

初始化COM库。 (Initialize)
创建一个与活动桌面交互的COM对象,并取得IActiveDesktop接口。
调用COM对象的GetWallpaper()方法。
如果GetWallpaper()成功,则输出/显示墙纸文件名。
释放接口(Release())。
收回COM库(Uninitialize)。

WCHAR   wszWallpaper [MAX_PATH];
CString strPath;
HRESULT hr;
IActiveDesktop* pIAD;

    // 1. 初始化COM库(让Windows加载DLLs)。通常是在程序的InitInstance()中调用
    // CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit()。

    CoInitialize ( NULL );

    // 2. 使用外壳提供的活动桌面组件对象类创建COM对象。
    // 第四个参数通知COM需要什么接口(这里是IActiveDesktop).

    hr = CoCreateInstance ( CLSID_ActiveDesktop,
                            NULL,
                            CLSCTX_INPROC_SERVER,
                            IID_IActiveDesktop,
                            (void**) &pIAD );

    if ( SUCCEEDED(hr) )
        {
        // 3. 如果COM对象被创建成功,则调用这个对象的GetWallpaper() 方法。
        hr = pIAD->GetWallpaper ( wszWallpaper, MAX_PATH, 0 );

        if ( SUCCEEDED(hr) )
            {
            // 4. 如果 GetWallpaper() 成功,则输出它返回的文件名字。
            // 注意这里使用wcout 来显示Unicode 串wszWallpaper.  wcout 是
            // Unicode 专用,功能与cout.相同。
            wcout << L"Wallpaper path is:\n    " << wszWallpaper << endl << endl;
            }
        else
            {
            cout << _T("GetWallpaper() failed.") << endl << endl;
            }

        // 5. 释放接口。
        pIAD->Release();
        }
    else
        {
        cout << _T("CoCreateInstance() failed.") << endl << endl;
        }

    // 6. 收回COM库。MFC 程序不用这一步,它自动完成。
CoUninitialize();
在这个例子中,输出/显示Unicode 串 wszWallpaper用的是std::wcout。

相关文章推荐

MyBatis的第一个HelloWorld小例子(不用接口)

首先要创建好相应的数据库和表,导入Mybatis相关的jar包以及数据库驱动的jar包。 在Eclipse中创建一个项目,将相关的包导入进去。 创建一个mybatis-config(名字可以随便取...

摸爬滚打DirectX11_day03——关于COM接口对象的一些介绍

目前Windows平台下的开发,主要是以C++与COM接口配DirectX为主要方案。COM(Component Object Model,组件对象模型)是一项能够使DirectX独立于编程语言并向下...

COM组件开发(一)—— 对象与接口

一.前言        在COM规范中,最基本的两个要素就是对象与接口,因为COM就是由这两者来共同实现的。COM对象在组件中是被封装起来的,客户代码只能通过接口来访问COM对象并享受其,由于客户与C...

创建和使用DirectX接口(并再次理解COM对象)

再次理解COM对象: 以前说:一个COM对象事实上是一个或一套实现了大量接口的C++类,这些接口用于和COM对象进行交流!!! 现在说:COM对象其实就是接口集,该接口集也就是函数指针(更准确的说...

创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。

/* 第二个例子展示了如何使用一个提供单接口的COM对象QueryInterface()函数。 其中的代码用外壳的Shell Link组件对象类创建我们在第一个例子中获得的 墙纸文件的快捷方式 以...

C#WPF无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“System.Speech.Internal.SapiInterop.ISpDataKey”。解决办法

无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“System.Speech.Internal.SapiInterop.ISpDataKey”。此操作失败的原因是...
  • wyx100
  • wyx100
  • 2015年02月19日 12:07
  • 3720

使用COM接口对象获得当前桌面墙纸的文件名

1.开发环境WINDOWS+VS2010+MFC Dialog Based 2.为了添加接口对象类,需要在stdafx.h中的#include 行之前增加#include   3.在BOO...
  • zzandyc
  • zzandyc
  • 2017年04月13日 22:14
  • 96

COM线程模型 - MTA接口 (STA套间调用MTA对象)

 http://support.microsoft.com/kb/150777
  • zj510
  • zj510
  • 2014年09月04日 15:42
  • 1603

【原创】使用vc向导简历的ATL COM简单对象好像没有IUnknown接口的实现?

  这两天看了看COM和ATL,还是有点云里雾里的感觉。对ATL如何实现COM的一个可创建对象还是不太明白,只知道一些概念。知识仅局限于能够使用VC 的向导简历一个ATL工程,增加一个ATL简单对象,...
  • ppslide
  • ppslide
  • 2011年06月17日 13:27
  • 593

检测COM接口信息的源码和例子

  • 2012年03月17日 23:33
  • 124KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第一个例子展示的是单接口COM对象
举报原因:
原因补充:

(最多只允许输入30个字)