QISearch的介绍

 

转载请标明是引用于 http://blog.youkuaiyun.com/chenyujing1234 

欢迎大家拍砖

 

 

 IUnknown::QueryInterface  方法牟表驱动的执行方法

HRESULT QISearch(
  _In_   void *that,
  _In_   LPCQITAB pqit,
  _In_   REFIID riid,
  _Out_  void **ppv
);


 

Parameters

that [in]

Type: void*

一个基本COM对象的指针.

pqit [in]

Type: LPCQITAB

一个 QITAB 结构体的数组. 数组最后的结构体必须设置为NULL,且dwOffset成员设置为0。

riid [in]

Type: REFIID

接口IID的引用,由调用者获得

ppv [out]

Type: void**

当此方法成功返回时,此变量包含riid要求的接口指针。

 

Remarks

在vista之前的版本号,QISearch不能使用。

而如果要使用,那么得从Shlwapi.dll中通过GetProcessAddress方法获得219,且QISearch被包含在Shlwapi.h中。

如果被要求的接口是IUnknown,那么QISearch用指定数据QITAB结构体中的第一个入口。否则QISearch搜索表,一直到它发现符合的IID

如果一个符合的IID被找到,那么它通过接口表QITAB结构体中的dwOffset指定绑定的接口指针,且重新解决为COM指针。此指针被分配在QISearch函数的ppv参数中。

此方法也调用IUnknown::AddRef来增加接口的相关计数。

例子:

class CSample : public IPersistFolder
{
  public:
    CSample() { /* other construction goes here */ }
    
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
    STDMETHODIMP_(ULONG) AddRef();
    STDMETHODIMP_(ULONG) Release();
  
    // *** IPersist ***
    STDMETHODIMP GetClassID(CLSID *pClassID);
    
    // *** IPersistFolder ***
    STDMETHODIMP Initialize(LPCITEMIDLIST pidl);
  
  private:
  // private members go here
};

HRESULT CSample::QueryInterface(REFIID riid, void **ppv)
{
    static QITAB rgqit[] = 
    {   
        QITABENT(CSample, IPersist),
        QITABENT(CSample, IPersistFolder)
        { 0 },
    };

    return QISearch(this, rgqit, IID_PPV_ARGS(&ppv));
}


Requirements

Minimum supported client

Windows 2000 Professional, Windows XP

Minimum supported server

Windows 2000 Server, Windows Server 2003

Header

Shlwapi.h

Library

Shlwapi.lib

DLL

Shlwapi.dll (version 5.0 or later)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值