windows-nt/Source/XPSP1/NT/ds/adsi/xml/adsxmlcf.cxx
2020-09-26 16:20:57 +08:00

106 lines
2.5 KiB
C++

//----------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 2000.
//
// File: adsxmlcf.cxx
//
// Contents: Contains the class factory for creating ADsXML extension.
//
//----------------------------------------------------------------------------
#include "adsxmlcf.hxx"
#include "adsxml2.h"
#define DISPID_REGULAR 1
const GUID LIBID_ADsXML = {0x61340306,0xe79c,0x401d,{0xa3,0x4a,0xcb,0xbc,0x99,0x19,0x90,0x25}};
const IID IID_IADsXML = {0x91e5c5dc,0x926b,0x46ff,{0x9f,0xdb,0x9f,0xb1,0x12,0xbf,0x10,0xe6}};
//----------------------------------------------------------------------------
// Function: CreateInstance
//
// Synopsis: Creates the ADsXML extension object.
//
// Arguments:
//
// pUnkOuter Pointer to aggregating IUnknown. This has to be non-NULL since
// the extension can't exist by itself.
// iid Interface requested.
// ppInterface Returns pointer to interface requested
//
// Returns: S_OK on success. Error code otherwise.
//
// Modifies: *ppInterface to return a pointer to the interface requested
//
//----------------------------------------------------------------------------
STDMETHODIMP CADsXMLCF::CreateInstance(
IUnknown * pUnkOuter,
REFIID iid,
LPVOID *ppInterface
)
{
HRESULT hr = S_OK;
CADsXML *pCADsXML = NULL;
IADs FAR * pADs = NULL;
CAggregateeDispMgr FAR * pDispMgr = NULL;
if( (NULL == pUnkOuter) || (NULL == ppInterface) )
RRETURN(E_INVALIDARG);
// can only ask for IUnknown
ADsAssert(IsEqualIID(iid, IID_IUnknown));
*ppInterface = NULL;
pCADsXML = new CADsXML();
if(NULL == pCADsXML) {
BAIL_ON_FAILURE(hr = E_OUTOFMEMORY);
}
pCADsXML->_pUnkOuter = pUnkOuter;
pDispMgr = new CAggregateeDispMgr;
if (pDispMgr == NULL) {
hr = E_OUTOFMEMORY;
BAIL_ON_FAILURE(hr);
}
pCADsXML->_pDispMgr = pDispMgr;
hr = pDispMgr->LoadTypeInfoEntry(
LIBID_ADsXML,
IID_IADsXML,
(IADsXML *)pCADsXML,
DISPID_REGULAR
);
BAIL_ON_FAILURE(hr);
hr = pUnkOuter->QueryInterface(
IID_IADs,
(void **)&pADs
);
BAIL_ON_FAILURE(hr);
pADs->Release();
pCADsXML->_pADs = pADs;
*ppInterface = (INonDelegatingUnknown FAR *) pCADsXML;
RRETURN(hr);
error:
if(pCADsXML)
delete pCADsXML;
*ppInterface = NULL;
RRETURN(hr);
}