IADsExtension Usage

IADsExtension ist eine optionale Schnittstelle, die vom Erweiterungswriter implementiert wird, wenn mindestens eine der folgenden Bedingungen erfüllt ist:

  • Die Erweiterungskomponente erfordert eine Initialisierungsbenachrichtigung, wie durch ADSI _ EXT _ dwCode in der Operate-Methode definiert.
  • Die Erweiterung unterstützt eine Dual- oder Dispatch-Schnittstelle.

Wenn eine Erweiterungskomponente die IADsExtension-Schnittstelle aus dem ersten Grund unterstützt, können die Methoden IADsExtension::P rivateGetIDsOfNames und IADsExtension::P rivateInvoke E _ NOTIMPL zurückgeben. Wenn eine Erweiterungskomponente eine Dual- oder Dispatch-Schnittstelle unterstützt, kann die Operate-Methode alternativ die Daten ignorieren und ein HRESULT von E _ NOTIMPL zurückgeben.

Der folgende Code zeigt eine Erweiterung, die IADsExtension implementieren.

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 );
}