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.
|
|
/*===================================================================
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
|