home *** CD-ROM | disk | FTP | other *** search
-
- #include <objbase.h>
- #include "resource.h"
- #include "lst41c.h"
-
- BSTR CreateBSTR(char *lpString)
- {
-
- BSTR bsz;
- UINT cch;
-
- cch = strlen(lpString);
-
-
- bsz = SysAllocStringLen(NULL , cch);
- if(bsz == NULL)
- return NULL;
-
- if(cch > 0)
- MultiByteToWideChar(CP_ACP, 0, lpString, cch, bsz, cch);
-
- bsz[cch] = NULL;
- return bsz;
- }
-
- STDMETHODIMP_(BSTR)
- CLst41I::GetMachineName()
- {
- BSTR b;
-
- ULONG ulLen;
-
- char *lpName;
- lpName = new char[MAX_PATH];
- ulLen = MAX_PATH;
-
- GetComputerName(lpName, &ulLen);
- b = CreateBSTR(lpName);
-
- return b;
- }
-
-
- STDMETHODIMP CLst41I::QueryInterface(REFIID riid, void** ppv)
- {
- return m_pLst41->QueryInterface(riid, ppv);
- }
-
- STDMETHODIMP_(ULONG) CLst41I::AddRef()
- {
- return m_pLst41->AddRef();
- }
-
- STDMETHODIMP_(ULONG) CLst41I::Release()
- {
- return m_pLst41->Release();
- }
-
-
- IUnknown *CreateDispatchInterface(IUnknown* punkController, void * pProgInterface)
- {
- HRESULT hresult;
- ITypeLib* ptlib;
- ITypeInfo* ptinfo;
- IUnknown* punkStdDisp;
-
- hresult = LoadRegTypeLib(LIBID_Lst41, 1, 0, 0x0409, &ptlib);
- if (hresult != S_OK)
- {
- if((hresult = LoadTypeLib(L"lst41.tlb", &ptlib)) != S_OK)
- return NULL;
- }
-
- hresult = ptlib->GetTypeInfoOfGuid(IID_ILst41, &ptinfo);
- if (hresult != S_OK)
- return NULL;
- ptlib->Release();
-
-
- hresult = CreateStdDispatch(punkController, pProgInterface, ptinfo, &punkStdDisp);
- if (hresult != S_OK)
- return NULL;
-
- ptinfo->Release();
-
- return punkStdDisp;
- }
-
-
-
- CLst41::CLst41()
- {
- m_refs = 1;
- m_disp_interface = NULL;
- m_prog_interface = new CLst41I;
- m_prog_interface->m_pLst41 = this;
- }
-
-
-
- CLst41::~CLst41()
- {
- delete m_prog_interface;
- }
-
-
-
- CLst41* CLst41::Create()
- {
- CLst41* pLst41;
- IUnknown* punkStdDisp;
-
- pLst41 = new CLst41();
- if(pLst41 == NULL)
- return NULL;
-
- punkStdDisp = CreateDispatchInterface((IUnknown*) pLst41,
- pLst41->m_prog_interface);
- if (punkStdDisp == NULL) {
- pLst41->Release();
- return NULL;
- }
-
- pLst41->m_disp_interface = punkStdDisp;
- return pLst41;
- }
-
-
-
- STDMETHODIMP CLst41::QueryInterface(REFIID riid, void ** ppv)
- {
- if (riid == IID_IUnknown)
- *ppv = this;
- else if (riid == IID_IDispatch || riid == DIID_DLst41)
- return m_disp_interface->QueryInterface(IID_IDispatch, ppv);
- else if (riid == IID_ILst41)
- *ppv = &m_prog_interface;
- else
- {
- *ppv = NULL;
- return ResultFromScode(E_NOINTERFACE);
- }
-
- AddRef();
- return S_OK;
- }
-
-
- STDMETHODIMP_(ULONG) CLst41::AddRef()
- {
- return ++m_refs;
- }
-
- STDMETHODIMP_(ULONG) CLst41::Release()
- {
- if(--m_refs == 0)
- {
- if(m_disp_interface != NULL)
- m_disp_interface->Release();
- PostQuitMessage(0);
- delete this;
- return 0;
- }
-
- return m_refs;
- }
-
-
-
- CLst41CF::CLst41CF()
- {
- m_refs = 1;
- }
-
-
-
- IClassFactory* CLst41CF::Create()
- {
- return new CLst41CF();
- }
-
- STDMETHODIMP CLst41CF::QueryInterface(REFIID riid, void** ppv)
- {
- if(riid == IID_IUnknown || riid == IID_IClassFactory)
- {
- AddRef();
- *ppv = this;
- return S_OK;
- }
-
- *ppv = NULL;
- return ResultFromScode(E_NOINTERFACE);
- }
-
-
- STDMETHODIMP_(ULONG) CLst41CF::AddRef()
- {
- return ++m_refs;
- }
-
-
-
-
-
- STDMETHODIMP_(ULONG) CLst41CF::Release()
- {
- if(--m_refs == 0)
- {
- delete this;
- return 0;
- }
-
- return m_refs;
- }
-
-
- STDMETHODIMP CLst41CF::CreateInstance(IUnknown* punkOuter,REFIID riid,void** ppv)
- {
- extern CLst41 * g_pLst41;
-
- return g_pLst41->QueryInterface(riid, ppv);
- }
-
-
-
- STDMETHODIMP CLst41CF::LockServer(BOOL fLock)
- {
- return S_OK;
- }
-