关闭

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

标签: mfcnullshellwindowsserver编程
437人阅读 评论(0) 收藏 举报
分类:
使用多接口的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();

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3115918次
    • 积分:41495
    • 等级:
    • 排名:第91名
    • 原创:399篇
    • 转载:4555篇
    • 译文:5篇
    • 评论:612条
    文章分类
    最新评论