IADsExtension 用法

IADsExtension 是扩展编写器在满足以下至少一个条件时实现的可选接口:

  • 扩展组件需要在 Operate 方法中由 ADSI_EXT_dwCode 定义初始化通知。
  • 该扩展支持双接口或调度接口。

如果扩展组件首先支持 IADsExtension 接口,IADsExtension::P rivateGetIDsOfNamesIADsExtension::P rivateInvoke 方法可以返回 E_NOTIMPL。 或者,如果扩展组件支持双接口或调度接口, 方法可以忽略数据,并返回 E_NOTIMPLHRESULT

以下代码显示了实现 IADsExtension的扩展。

STDMETHOD(Operate)(ULONG dwCode, VARIANT varData1, VARIANT varData2, VARIANT varData3)
{
    HRESULT hr = S_OK;
    switch (dwCode) 
    {
    case ADS_EXT_INIT:
         // Prompt for a credential.
         // MessageBox(NULL, "INITCRED", "ADsExt", MB_OK);
          break;
    default:
          hr = E_FAIL;
          break;
    }        
    return hr;        
}
 
STDMETHOD(PrivateGetIDsOfNames)(REFIID riid, OLECHAR ** rgszNames, unsigned int cNames, LCID lcid, DISPID  * rgdispid)
{        
      if (rgdispid == NULL)
      {
        return E_POINTER;
      }    
    return  DispGetIDsOfNames(m_pTypeInfo, rgszNames, cNames, rgdispid);
}
 
STDMETHOD(PrivateInvoke)(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pdispparams, VARIANT * pvarResult, EXCEPINFO * pexcepinfo, UINT * puArgErr)
{
 return DispInvoke( (IHelloWorld*)this, 
           m_pTypeInfo,
        dispidMember, 
        wFlags, 
        pdispparams, 
        pvarResult, 
        pexcepinfo, 
        puArgErr );
}