第二个例子展示了如何使用一个提供单接口的COM对象QueryInterface()函数

转载 2012年03月31日 08:45:12
使用多接口的COM对象
    第二个例子展示了如何使用一个提供单接口的COM对象QueryInterface()函数。其中的代码用外壳的Shell Link组件对象类创建我们在第一个例子中获得的墙纸文件的快捷方式
以下是编程步骤:

初始化COM 库。 
创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。
调用IShellLink 接口的SetPath()方法
调用对象的QueryInterface()函数并取得IPersistFile接口。
调用IPersistFile 接口的Save()方法。
释放接口
收回COM库

CString       sWallpaper = wszWallpaper;  // 将墙纸路径转换为ANSI
IShellLink*   pISL;
IPersistFile* pIPF;

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

    CoInitialize ( NULL );

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

    hr = CoCreateInstance ( CLSID_ShellLink,
                            NULL,
                            CLSCTX_INPROC_SERVER,
                            IID_IShellLink,
                            (void**) &pISL );

    if ( SUCCEEDED(hr) )
        {
        // 3. 设置快捷方式目标(墙纸文件)的路径。
        hr = pISL->SetPath ( sWallpaper );

        if ( SUCCEEDED(hr) )
            {
            // 4. 获取这个对象的第二个接口(IPersistFile)。
            hr = pISL->QueryInterface ( IID_IPersistFile, (void**) &pIPF );

            if ( SUCCEEDED(hr) )
                {
                // 5. 调用Save() 方法保存某个文件得快捷方式。第一个参数是
                // Unicode 串。
                hr = pIPF->Save ( L"C:\\wallpaper.lnk", FALSE );

                // 6a. 释放IPersistFile 接口。
                pIPF->Release();
                }
            }

        // 6. 释放IShellLink 接口。
        pISL->Release();
        }

    // 输出错误信息部分这里省略。

    // 7. 收回COM 库。MFC 程序不用这一步,它自动完成。
    CoUninitialize();

QueryInterface 实现及使用的完整的例子

下面我们将把前面所提到过和各代码段组合起来,以构成一个说明QueryInterface 实现及使用的完整例子。总的来说可以将这些代码分成三部分。第一部分是接口IX、 IY 和 IZ 的定义部分。接口 ...
  • sunbingzibo
  • sunbingzibo
  • 2007年09月23日 15:21
  • 2301

C#中COM操作(二)---接口查询

    上一篇末留下的一个疑问这一回来作个解答吧。大家看了下面的图就清楚了:    结论就是t1,t2,t3是三个不同的引用,也就是说在.NET里面代表了三种不同的类型,但是三种类型的GUID却是一样...
  • bindsang
  • bindsang
  • 2008年08月18日 23:30
  • 4172

如何使用一个提供单接口的COM对象QueryInterface()函数

You could try#include #include //这样的顺序就可以通过编译了as I believe there are things in shlobj.h that rely on...
  • instruder
  • instruder
  • 2010年11月04日 11:47
  • 468

UI Automation出现QueryInterface 调用异常

在使用UI Automation的findFirst查找控件的时候出现了以下异常: 执行了 QueryInterface 调用,请求提供 COM 可见的托管类“MS.Internal.Automat...
  • vairx
  • vairx
  • 2012年05月10日 15:47
  • 902

ATL学习笔记(3): QueryInterface功能的实现

在CComObjectRootEx类中,实现了线程安全的引用计数管理。而在CComObjectRootEx的父类CComObjectRootBase中,存在对QueryInterface的一个内部实现...
  • DarkMagician_Potter
  • DarkMagician_Potter
  • 2014年06月04日 11:37
  • 837

WPF WebBrowser使用JavaScript调用外部方法决解方法简介

WPF WebBrowser使用JavaScript调用外部方法决解方法简介 2012-03-29  来自:CNBLOGS  字体大小:【大 中 小】 摘要:本文介绍WPF WebBr...
  • y38701522
  • y38701522
  • 2013年03月13日 18:06
  • 1029

为不是函数的对象 'dbo.xxxx' 提供了参数。如果这些参数要作为表提示,则需要使用 WITH 关键字

为不是函数的对象 'dbo.xxxxxx' 提供了参数。如果这些参数要作为表提示,则需要使用 WITH 关键字 犯错误原因:给视图加条件了。。 用.where(a=>a.ID=xxx.ID)...
  • qq_36279445
  • qq_36279445
  • 2017年07月01日 15:32
  • 391

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

用例子代码总结上述内容 下面用两个例子演示本文所讲的COM概念。代码中还包含了本文的例子工程。 使用单接口COM对象 第一个例子展示的是单接口COM对象。这可能是你碰到得最简单的例子。...
  • autumn20080101
  • autumn20080101
  • 2012年03月31日 08:29
  • 528

对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。

原文地址:http://www.cnblogs.com/gisoracle/p/5440846.html 无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接...
  • lzhui1987
  • lzhui1987
  • 2017年08月11日 10:41
  • 2116

COM组件 接口(Interface)的来历

作为客户端程序员,它希望或者说他要求:我的程序只写一次,然后不做任何修改就可以调用任意一个组件。举例来说: 你可以在 Word 中嵌入 Excel,也可以嵌入 Picture,也可以嵌入任何...
  • mniwc
  • mniwc
  • 2011年08月31日 21:19
  • 2831
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第二个例子展示了如何使用一个提供单接口的COM对象QueryInterface()函数
举报原因:
原因补充:

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