/**************************************************************************
*
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
* KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
* PURPOSE.
*
* Copyright 1993 - 1998 Microsoft Corporation. All Rights Reserved.
*
**************************************************************************/
#define INC_OLE2
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#ifndef WIN32
#include <ole2.h>
#endif
#include <string.h>
#include <vfw.h>
#include "aviview.h"
#include "regobjs.h"
/*
** The usage counter keeps track of the overall usage of objects based on
** implementations provided by the component. This allows one to determine
** when the implementation is no longer in use.
*/
UINTuUseCount;
BOOLfLocked;
IClassFactory FAR * gpCF;
DWORD gdwRegistered;
extern "C" BOOL RegisterObjects(void);
extern "C" void RevokeObjects(void);
BOOL RegisterObjects(void)
{
#if 0
HRESULT hresult;
#endif
// OleInitialize(NULL);
#if 0
CAppCF::MakeInst(CLSID_ACMCmprsStream, IID_IClassFactory,
(void FAR * FAR *) &gpCF);
hresult = CoRegisterClassObject(CLSID_ACMCmprsStream,
gpCF,
CLSCTX_INPROC_SERVER,
REGCLS_MULTIPLEUSE,
&gdwRegistered);
if (FAILED(GetScode(hresult))) {
delete gpCF;
gpCF = NULL;
return FALSE;
}
#endif
return TRUE;
}
void RevokeObjects(void)
{
#if 0
CoRevokeClassObject(gdwRegistered);
#endif
// OleUninitialize();
}
/*--------*/
HRESULT CAppCF::MakeInst(
const CLSID FAR&rclsid,
const IID FAR&riid,
void FAR* FAR*ppv)
{
CAppCF FAR*pAppCF;
IUnknown FAR*pUnknown;
HRESULT hresult;
pAppCF = new FAR CAppCF(rclsid, &pUnknown);
if (pAppCF == NULL)
return ResultFromScode(E_OUTOFMEMORY);
hresult = pUnknown->QueryInterface(riid, ppv);
if (FAILED(GetScode(hresult)))
delete pAppCF;
return hresult;
}
/*--------*/
CAppCF::CAppCF(
const CLSID FAR&rclsid,
IUnknown FAR* FAR*ppUnknown)
{
m_clsid = rclsid;
m_refs = 0;
*ppUnknown = this;
}
/*--------*/
STDMETHODIMP CAppCF::QueryInterface(
const IID FAR&iid,
void FAR* FAR*ppv)
{
if (iid == IID_IUnknown)
*ppv = this;
else if (iid == IID_IClassFactory)
*ppv = this;
else
return ResultFromScode(E_NOINTERFACE);
AddRef();
return NULL;
}
/*--------*/
STDMETHODIMP_(ULONG) CAppCF::AddRef()
{
return ++m_refs;
}
/*--------*/
STDMETHODIMP_(ULONG) CAppCF::Release()
{
if (!--m_refs) {
delete this;
return 0;
}
return m_refs;
}
/*--------*/
STDMETHODIMP CAppCF::CreateInstance(
IUnknown FAR*pUnknownOuter,
const IID FAR&riid,
void FAR* FAR*ppv)
{
#if 0
if (IsEqualCLSID(m_clsid, CLSID_ACMCmprsStream)) {
return CACMCmpStream::MakeInst(pUnknownOuter, riid, ppv);
}
else
#endif
{
return ResultFromScode(CO_E_CANTDETERMINECLASS); // !!!
}
}
/*--------*/
STDMETHODIMP CAppCF::LockServer(
BOOLfLock)
{
fLocked = fLock;
return NULL;
}
/*--------*/