windows-nt/Source/XPSP1/NT/shell/ext/taskui/test/pagefact.cpp

57 lines
1.4 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
// PageFact.cpp: implementation of the CPageFactory class.
//
//////////////////////////////////////////////////////////////////////
#include "pch.h"
#include "PageFact.h"
#include "Page1.h"
#include "Page2.h"
//////////////////////////////////////////////////////////////////////
// ITaskPageFactory
//////////////////////////////////////////////////////////////////////
typedef struct
{
const CLSID *pclsid;
_ATL_CREATORFUNC* pfnCreateInstance;
} _PAGEMAP_ENTRY;
#define PAGE_ENTRY2(clsid,class) {&clsid, class::_CreatorClass::CreateInstance},
#define PAGE_ENTRY(class) PAGE_ENTRY2(__uuidof(class), class)
static const _PAGEMAP_ENTRY s_rgPage[] =
{
PAGE_ENTRY(CPage1)
PAGE_ENTRY(CPage2)
};
STDMETHODIMP CPageFactory::CreatePage(REFCLSID rclsidPage, REFIID riid, void ** ppv)
{
HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
//if (CLSID_CPage1 == rclsidPage)
//{
// hr = CPage1::_CreatorClass::CreateInstance(NULL, riid, ppv);
//}
//else if (CLSID_CPage2 == rclsidPage)
//{
// hr = CPage2::_CreatorClass::CreateInstance(NULL, riid, ppv);
//}
// etc.
for (UINT i = 0; i < ARRAYSIZE(s_rgPage); i++)
{
if (rclsidPage == *s_rgPage[i].pclsid)
{
if (NULL != s_rgPage[i].pfnCreateInstance)
{
hr = s_rgPage[i].pfnCreateInstance(NULL, riid, ppv);
}
break;
}
}
return hr;
}