Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

126 lines
3.1 KiB

/*===================================================================
Microsoft Denali
Microsoft Confidential.
Copyright 1997 Microsoft Corporation. All Rights Reserved.
Component: Typelibrary cache
File: tlbcache.h
Owner: DmitryR
This is the typelibrary cache header file.
===================================================================*/
#ifndef _ASP_TLBCACHE_H
#define _ASP_TLBCACHE_H
/*===================================================================
Includes
===================================================================*/
#include "compcol.h"
#include "hashing.h"
#include "idhash.h"
#include "dbllink.h"
#include "util.h"
#include "viperint.h"
#include "memcls.h"
/*===================================================================
Defines
===================================================================*/
class CHitObj;
/*===================================================================
C T y p e l i b C a c h e E n t r y
===================================================================*/
class CTypelibCacheEntry : public CLinkElem
{
friend class CTypelibCache;
private:
DWORD m_fInited : 1;
DWORD m_fIdsCached : 1;
DWORD m_fStrAllocated : 1;
WCHAR *m_wszProgId;
CLSID m_clsid;
CompModel m_cmModel;
DISPID m_idOnStartPage;
DISPID m_idOnEndPage;
DWORD m_gipTypelib;
// buffer to keep prog id (when it fits)
WCHAR m_rgbStrBuffer[60];
CTypelibCacheEntry();
~CTypelibCacheEntry();
HRESULT StoreProgID(LPWSTR wszProgid, DWORD cbProgid);
HRESULT InitByProgID(LPWSTR wszProgid, DWORD cbProgid);
HRESULT InitByCLSID(const CLSID &clsid, LPWSTR wszProgid);
// Cache on per-class basis
ACACHE_INCLASS_DEFINITIONS()
};
/*===================================================================
C T y p e l i b C a c h e
===================================================================*/
class CTypelibCache
{
private:
DWORD m_fInited : 1;
CHashTableStr m_htProgIdEntries;
CHashTableCLSID m_htCLSIDEntries;
CRITICAL_SECTION m_csLock;
void Lock() { EnterCriticalSection(&m_csLock); }
void UnLock() { LeaveCriticalSection(&m_csLock); }
public:
CTypelibCache();
~CTypelibCache();
HRESULT Init();
HRESULT UnInit();
// to be called from Server.CreateObject
HRESULT CreateComponent
(
BSTR bstrProgID,
CHitObj *pHitObj,
IDispatch **ppdisp,
CLSID *pclsid
);
// to be called from template after mapping ProgId to CLSID
HRESULT RememberProgidToCLSIDMapping
(
WCHAR *wszProgid,
const CLSID &clsid
);
// to be called from object creation code to update CLSID
// if changed since mapping
HRESULT UpdateMappedCLSID
(
CLSID *pclsid
);
};
/*===================================================================
Globals
===================================================================*/
extern CTypelibCache g_TypelibCache;
#endif