QISearch的介绍

 

转载请标明是引用于 http://blog.csdn.net/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)

 

你可能感兴趣的:(windows,server,null,Class,Go,construction)