Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
attrstr.h
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 7k
Category:
Windows Kernel
Development Platform:
Visual C++
- // AttrStr.h : Declaration of the CMLStrAttrStrCommon
- #ifndef __ATTRSTR_H_
- #define __ATTRSTR_H_
- #include "mlatl.h"
- #include "mlstrbuf.h"
- /////////////////////////////////////////////////////////////////////////////
- // CMLStrAttrStrCommon
- class CMLStrAttrStrCommon
- {
- typedef HRESULT (CMLStrAttrStrCommon::*PFNUNLOCKPROC)(void* pKey, const void* pszSrc, long cchSrc, long* pcchActual, long* plActualLen);
- public:
- CMLStrAttrStrCommon(void);
- protected:
- class CLockInfo
- {
- protected:
- class CLockInfoEntry
- {
- public:
- void* m_psz;
- PFNUNLOCKPROC m_pfnUnlockProc;
- long m_lFlags;
- UINT m_uCodePage;
- long m_lPos;
- long m_lLen;
- long m_cchPos;
- long m_cchLen;
- };
- public:
- CLockInfo(CMLStrAttrStrCommon* pCommon) : m_pCommon(pCommon)
- {
- m_nLockCount = 0;
- m_pLockArray = NULL;
- }
- ~CLockInfo(void)
- {
- UnlockAll();
- }
- HRESULT UnlockAll(void);
- HRESULT StartLock(BOOL fWrite)
- {
- if (fWrite && !m_nLockCount)
- m_nLockCount = -1; // Negative means write lock
- else if (!fWrite && m_nLockCount >= 0)
- m_nLockCount++;
- else
- return MLSTR_E_ACCESSDENIED;
- return S_OK;
- }
- HRESULT EndLock(BOOL fWrite)
- {
- ASSERT(m_nLockCount);
- if (fWrite)
- m_nLockCount = 0;
- else
- m_nLockCount--;
- return S_OK;
- }
- HRESULT Lock(PFNUNLOCKPROC pfnUnlockProc, long lFlags, UINT uCodePage, void* psz, long lPos, long lLen, long cchPos, long cchLen);
- HRESULT Find(const void* psz, long cch, void** ppKey);
- HRESULT Unlock(void* pKey, const void* psz, long cch, long* pcchActual, long* plActualLen);
- long GetFlags(void* pKey) {return ((CLockInfoEntry*)pKey)->m_lFlags;}
- UINT GetCodePage(void* pKey) {return ((CLockInfoEntry*)pKey)->m_uCodePage;}
- long GetPos(void* pKey) {return ((CLockInfoEntry*)pKey)->m_lPos;}
- long GetLen(void* pKey) {return ((CLockInfoEntry*)pKey)->m_lLen;}
- long GetCChPos(void* pKey) {return ((CLockInfoEntry*)pKey)->m_cchPos;}
- long GetCChLen(void* pKey) {return ((CLockInfoEntry*)pKey)->m_cchLen;}
- protected:
- CMLStrAttrStrCommon* const m_pCommon;
- int m_nLockCount;
- CLockInfoEntry* m_pLockArray;
- };
- class CMLStrBufStandardW : public CMLStrBufW
- {
- protected:
- LPVOID MemAlloc(ULONG cb) {return ::CoTaskMemAlloc(cb);}
- LPVOID MemRealloc(LPVOID pv, ULONG cb) {return ::CoTaskMemRealloc(pv, cb);}
- void MemFree(LPVOID pv) {::CoTaskMemFree(pv);}
- long RoundBufSize(long cchStr);
- };
- public:
- class CLock
- {
- public:
- CLock(BOOL fWrite, CMLStrAttrStrCommon* pCommon, HRESULT& hr) : m_fWrite(fWrite), m_pCommon(pCommon) {m_fLocked = (SUCCEEDED(hr) && SUCCEEDED(hr = m_pCommon->GetLockInfo()->StartLock(m_fWrite)));}
- ~CLock(void) {if (m_fLocked) m_pCommon->GetLockInfo()->EndLock(m_fWrite);}
- HRESULT FallThrough(void) {m_fLocked = FALSE; return S_OK;} // Don't call EndLock in destructor
- protected:
- const BOOL m_fWrite;
- CMLStrAttrStrCommon* const m_pCommon;
- BOOL m_fLocked;
- };
- HRESULT PrepareMLStrBuf(void);
- HRESULT SetStrBufCommon(void* pMLStrX, long lDestPos, long lDestLen, UINT uCodePage, IMLangStringBufW* pSrcBufW, IMLangStringBufA* pSrcBufA, long* pcchActual, long* plActualLen);
- HRESULT UnlockStrCommon(const void* pszSrc, long cchSrc, long* pcchActual, long* plActualLen);
- HRESULT CheckThread(void) {return (m_dwThreadID == ::GetCurrentThreadId()) ? S_OK : E_FAIL;}
- HRESULT RegularizePosLen(long* plPos, long* plLen);
- HRESULT GetLen(long cchOffset, long cchLen, long* plLen);
- HRESULT GetCCh(long cchOffset, long lLen, long* pcchLen);
- static HRESULT CalcLenW(const WCHAR*, long cchLen, long* plLen) {if (plLen) *plLen = cchLen; return S_OK;}
- static HRESULT CalcLenA(UINT uCodePage, const CHAR*, long cchLen, long* plLen);
- static HRESULT CalcCChW(const WCHAR*, long lLen, long* pcchLen) {if (pcchLen) *pcchLen = lLen; return S_OK;}
- static HRESULT CalcCChA(UINT uCodePage, const CHAR*, long lLen, long* pcchLen);
- static HRESULT CalcBufSizeW(long lLen, long* pcchSize) {if (pcchSize) *pcchSize = lLen; return S_OK;}
- static HRESULT CalcBufSizeA(long lLen, long* pcchSize) {if (pcchSize) *pcchSize = lLen * 2; return S_OK;}
- static HRESULT ConvAStrToWStr(UINT uCodePage, const CHAR* pszSrc, long cchSrc, WCHAR* pszDest, long cchDest, long* pcchActualA, long* pcchActualW, long* plActualLen);
- static HRESULT ConvWStrToAStr(BOOL fCanStopAtMiddle, UINT uCodePage, const WCHAR* pszSrc, long cchSrc, CHAR* pszDest, long cchDest, long* pcchActualA, long* pcchActualW, long* plActualLen);
- IMLangStringBufW* GetMLStrBufW(void) const {return m_pMLStrBufW;}
- void SetMLStrBufW(IMLangStringBufW* pBuf) {m_pMLStrBufW = pBuf;}
- IMLangStringBufA* GetMLStrBufA(void) const {return m_pMLStrBufA;}
- void SetMLStrBufA(IMLangStringBufA* pBuf) {m_pMLStrBufA = pBuf;}
- UINT GetCodePage(void) const {return m_uCodePage;}
- void SetCodePage(UINT uCodePage) {m_uCodePage = uCodePage;}
- long GetBufFlags(void) const {return m_lBufFlags;}
- void SetBufFlags(long lBufFlags) {m_lBufFlags = lBufFlags;}
- long GetBufCCh(void) const {return m_cchBuf;}
- void SetBufCCh(long cchBuf) {m_cchBuf = cchBuf;}
- LCID GetLocale(void) const {return m_locale;}
- void SetLocale(LCID locale) {m_locale = locale;}
- CLockInfo* GetLockInfo(void) {return &m_LockInfo;}
- HRESULT MemAlloc(ULONG cb, void** ppv) {void* pv = ::CoTaskMemAlloc(cb); if (ppv) *ppv = pv; return (pv) ? S_OK : E_OUTOFMEMORY;}
- HRESULT MemFree(void* pv) {::CoTaskMemFree(pv); return S_OK;}
- HRESULT UnlockWStrDirect(void* pKey, const void* pszSrc, long cchSrc, long* pcchActual, long* plActualLen);
- HRESULT UnlockWStrIndirect(void* pKey, const void* pszSrc, long cchSrc, long* pcchActual, long* plActualLen);
- HRESULT UnlockAStrDirect(void* pKey, const void* pszSrc, long cchSrc, long* pcchActual, long* plActualLen);
- HRESULT UnlockAStrIndirect(void* pKey, const void* pszSrc, long cchSrc, long* pcchActual, long* plActualLen);
- protected:
- ~CMLStrAttrStrCommon(void);
- virtual IMLStrAttr* GetMLStrAttr(void) = 0;
- DWORD m_dwThreadID;
- IMLangStringBufW* m_pMLStrBufW;
- IMLangStringBufA* m_pMLStrBufA;
- UINT m_uCodePage;
- long m_lBufFlags;
- long m_cchBuf;
- LCID m_locale;
- CLockInfo m_LockInfo;
- };
- #endif //__ATTRSTR_H_