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.2 KiB
126 lines
3.2 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
|