HELLOCF.CPP (HELLO OLE Sample)

/*************************************************************************

  • OLE Automation Hello 2.0 Application.

  • hellocf.cpp

  • CHelloCF (class factory) implementation

  • Written by Microsoft Product Support Services, Windows Developer Support

  • (c) Copyright Microsoft Corp. 1994 All Rights Reserved

  • ***********************************************************************/

#include <windows.h>

#include <windowsx.h>

#ifdef WIN16

#include <ole2.h>

#include <compobj.h>

#include <dispatch.h>

#include <variant.h>

#include <olenls.h>

#endif

#include "hello.h"

CHelloCF::CHelloCF(void)

{

m_cRef = 0;

}

/*

* CHelloCF::QueryInterface, AddRef, Release

*

* Purpose:

* Implements IUnknown::QueryInterface, AddRef, Release

*

*/

STDMETHODIMP

CHelloCF::QueryInterface(REFIID iid, void FAR* FAR* ppv)

{

*ppv = NULL;

if (iid == IID_IUnknown || iid == IID_IClassFactory)

*ppv = this;

else

return ResultFromScode(E_NOINTERFACE);

AddRef();

return NOERROR;

}

STDMETHODIMP_(ULONG)

CHelloCF::AddRef(void)

{

#ifdef _DEBUG

TCHAR ach[50];

wsprintf(ach, TEXT("Ref = %ld, Hello Class Factory\r\n"), m_cRef+1);

OutputDebugString(ach);

#endif

return ++m_cRef;

}

STDMETHODIMP_(ULONG)

CHelloCF::Release(void)

{

#ifdef _DEBUG

TCHAR ach[50];

wsprintf(ach, TEXT("Ref = %ld, Hello Class Factory\r\n"), m_cRef-1);

OutputDebugString(ach);

#endif

if(--m_cRef == 0)

{

delete this;

return 0;

}

return m_cRef;

}

/*

* CHelloCF::CreateInstance, LockServer

*

* Purpose:

* Implements IClassFactory::CreateInstance, LockServer

*

*/

STDMETHODIMP

CHelloCF::CreateInstance(IUnknown FAR* punkOuter,

REFIID riid,

void FAR* FAR* ppv)

{

HRESULT hr;

*ppv = NULL;

// This implementation does'nt allow aggregation

if (punkOuter)

return ResultFromScode(CLASS_E_NOAGGREGATION);

// This is REGCLS_SINGLEUSE class factory, so CreateInstance will be

// called atmost once. An application objects has a REGCLS_SINGLEUSE class

// factory. The global application object has already been created when

// CreateInstance is called. A REGCLS_MULTIPLEUSE class factory's

// CreateInstance would be called multiple times and would create a new

// object each time. An MDI application would have a REGCLS_MULTIPLEUSE

// class factory for it's document objects.

hr = g_phello->QueryInterface(riid, ppv);

if (FAILED(hr))

{

g_phello->Quit();

return hr;

}

return NOERROR;

}

STDMETHODIMP

CHelloCF::LockServer(BOOL fLock)

{

CoLockObjectExternal(g_phello, fLock, TRUE);

return NOERROR;

}

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples