106 lines
2.5 KiB
C++
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);
|
|
}
|
|
|
|
|
|
|