第一个例子展示的是单接口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(名字可以随便取...

无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Wor

无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Wor...

COM组件的接口和对象

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

COM 对象强制转换为接口类型问题

先看问题: 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.VisualStudio.Tools.Applications.Runtime...

创建一个用于建立快捷方式的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
  • 3396

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

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

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

再次理解COM对象: 以前说:一个COM对象事实上是一个或一套实现了大量接口的C++类,这些接口用于和COM对象进行交流!!! 现在说:COM对象其实就是接口集,该接口集也就是函数指针(更准确的说...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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