IADsExtension 是扩展编写器在满足以下至少一个条件时实现的可选接口:
- 扩展组件需要在 Operate 方法中由 ADSI_EXT_dwCode 定义初始化通知。
- 该扩展支持双接口或调度接口。
如果扩展组件首先支持 IADsExtension 接口,IADsExtension::P rivateGetIDsOfNames 和 IADsExtension::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 );
}