Эта функция входит в класс фабрики классов и её задача создать физически в памяти экземпляр класса.
STDMETHODIMP CClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,REFIID riid,void** ppvObj)
{
Step* pStep;
HRESULT hr;
*ppvObj = 0;
pStep = new Step;
if ( pStep == 0 )
return( E_OUTOFMEMORY );
hr = pStep->QueryInterface( riid, ppvObj );
if (FAILED(hr)) delete pStep;
return hr;
}
Как видите используем оператор new для получения экземпляра объекта. А дальше запрашивается интерфейс. И если все нормально, то возвращается S_OK. Ну и теперь пора сделать нашу функцию, ради которой этот объект и создавался.
STDMETHODIMP Step::MyComMessage()
{
MessageBox(NULL,"It is my COM Object !!!!","Yes !!!",0);
return S_OK;
}
Пора сделать функцию для регистрации класса.
STDAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void** ppv )
{
HRESULT hr;
CClassFactory *cf;
if ( rclsid != CLSID_Step ) return( E_FAIL );
cf=new CClassFactory;
if ( cf == 0 ) return( E_OUTOFMEMORY );
hr = cf->QueryInterface( riid, ppv );
if (FAILED(hr)) delete cf;
return hr;
}
И естественно функцию DllCanUnloadNow:
STDAPI DllCanUnloadNow(void)
{
if ( g_lLocks )
return( S_FALSE );
else
return( S_OK );
}