clntxres.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:8k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _clntxres_h
  36. #define _clntres_h
  37. #include "hxtypes.h"
  38. #include "chxdataf.h"
  39. #include "hxpeff.h"
  40. #include "hxunicod.h"
  41. #include "hxxres.h"
  42. #include "hxplugn.h"
  43. #include "hxcomm.h"
  44. #include "hxstring.h"
  45. #include "hxslist.h"
  46. #include "baseobj.h"
  47. /* CONSTANTS */
  48. #define kDefaultCacheLimit      1024*8          // 8KB
  49. /* STRUCTURES */
  50. /* RESOURCE STRUCTURES  */
  51. /* INTERNAL STRUCTURES */
  52. typedef struct  _HX_IMAGE_RESOURCE_DIRECTORY
  53. {
  54. ULONG32         Characteristics;
  55. ULONG32         TimeDateStamp;
  56. UINT16          MajorVersion;
  57. UINT16          MinorVersion;
  58. UINT16          NumberOfNamedEntries;
  59. UINT16          NumberOfIdEntries;
  60. } HX_IMAGE_RESOURCE_DIRECTORY, *PHX_IMAGE_RESOURCE_DIRECTORY;
  61. typedef struct _HX_IMAGE_RESOURCE_DIRECTORY_ENTRY
  62. {
  63. ULONG32         Name;
  64. ULONG32         OffsetToData;
  65. } HX_IMAGE_RESOURCE_DIRECTORY_ENTRY, *PHX_IMAGE_RESOURCE_DIRECTORY_ENTRY;
  66. typedef struct  _HX_IMAGE_RESOURCE_DATA_ENTRY
  67. {
  68. ULONG32         OffsetToData;
  69. ULONG32         Size;
  70. ULONG32         CodePage;
  71. ULONG32         Reserved;
  72. } HX_IMAGE_RESOURCE_DATA_ENTRY, *PHX_IMAGE_RESOURCE_DATA_ENTRY;
  73. /*
  74. This structure is used to create a map of all the resources, id's and their location in the file.
  75. */
  76. typedef struct tagXResCacheEntry
  77. {
  78. ULONG32 type;                   // Resource type;
  79. ULONG32 id;                             // Resource ID;
  80. ULONG32 location;               // Location in file from, offset from the beginning of the file.
  81. ULONG32 language;               // Language of the data.
  82. ULONG32 size;                   // size of the data. 
  83. BOOL    cached;                 // Is the resource already cached in memory?
  84. UCHAR*  cached_data;    // Data of the resource when cached in memory.
  85. } XResCacheEntry;
  86. class   CHXSimpleList;
  87. class   CHXXResource;
  88. class   CHXXResFile : public IHXPlugin,
  89.       public IHXXResFile, 
  90.       public CHXPeff, 
  91.       public CHXUnicode,
  92.       public CHXBaseCountingObject
  93. {
  94. public:
  95. // IUnknown methods...
  96. STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppvObj);
  97. STDMETHOD_(ULONG32, AddRef) (THIS);
  98. STDMETHOD_(ULONG32, Release) (THIS);
  99. // IHXPlugin methods...
  100. STDMETHOD(GetPluginInfo)    (THIS_
  101.     REF(BOOL)  /*OUT*/ bMultipleLoad,
  102.     REF(const char*) /*OUT*/ pDescription,
  103.     REF(const char*) /*OUT*/ pCopyright,
  104.     REF(const char*) /*OUT*/ pMoreInfoURL,
  105.     REF(ULONG32)  /*OUT*/ ulVersionNumber);
  106. STDMETHOD(InitPlugin)     (THIS_
  107.     IUnknown*   /*IN*/  pContext);
  108. //
  109. //      CHXXResFile Methods
  110. //
  111. CHXXResFile();
  112. STDMETHOD_(HX_RESULT,Open) (THIS_ const char* path);
  113. STDMETHOD_(HX_RESULT,Close) (THIS);
  114. STDMETHOD_(HX_RESULT,SetLanguage)               (THIS_ ULONG32 id);
  115. STDMETHOD_(HX_RESULT,GetResource)               (THIS_ ULONG32 type, ULONG32 ID, IHXXResource** resource);
  116. STDMETHOD_(IHXXResource*,GetString)            (THIS_ ULONG32 ID);
  117. STDMETHOD_(IHXXResource*,GetBitmap)            (THIS_ ULONG32 ID);
  118. STDMETHOD_(IHXXResource*,GetDialog)            (THIS_ ULONG32 ID);
  119. STDMETHOD_(IHXXResource*,GetVersionInfo) (THIS);
  120. STDMETHOD(GetFirstResourceLanguage) (THIS_ REF(ULONG32) ulLangID);
  121. STDMETHOD(GetNextResourceLanguage) (THIS_ REF(ULONG32) ulLangID);
  122. STDMETHOD_(BOOL,IncludesShortName) (THIS_ const char* pShortName);
  123. STDMETHOD_(HX_RESULT,FlushCache)                (THIS);
  124. STDMETHOD_(HX_RESULT,SetCacheLimit)             (THIS_ ULONG32 MaxCachedData);
  125. STDMETHOD(UseResourceFile) (THIS_
  126.   INT16   /*IN*/  nResourceFileRef);
  127. private:
  128. virtual ~CHXXResFile ();
  129. HX_RESULT       FindInCache (ULONG32 type,
  130. ULONG32 ID,  
  131. XResCacheEntry**  ppEntry);
  132. HX_RESULT       KillCache (void);
  133. HX_RESULT       FindResourceData (void);
  134. HX_RESULT       TrimCachedData (ULONG32 needed);
  135. HX_RESULT       CacheResourceEntries (void);
  136. HX_RESULT       ReadResourceHeader (void);
  137. HX_RESULT       ReadInAllResources (void);
  138. HX_RESULT       GetResourceEntry (HX_IMAGE_RESOURCE_DIRECTORY_ENTRY& h);
  139. HX_RESULT       GetResourceDirEntry (HX_IMAGE_RESOURCE_DIRECTORY& h);
  140. BYTE* GetResInfo (BYTE* pData, 
  141. UINT16& ulResInfoLen,
  142. UINT16& uResInfoType,
  143. CHXString& key);
  144. UINT32 GetCodePage (void);
  145. IUnknown* m_pContext;
  146. IHXCommonClassFactory* m_pCommonClassFactory;
  147. ULONG32                                 mResourceDataPosition;          // Start of the Resource data in the file.
  148. ULONG32                                 mResSectionVirtualAddress;  // Virtual Address of the resource section.
  149. HX_IMAGE_RESOURCE_DIRECTORY             mResourceHeader;                        // Resource Header.
  150. ULONG32                                 mLanguageId;                        // Language ID of resources to load.
  151. ULONG32                                 mMaxCachedData;                         // Total number of bytes allowed to be cached.
  152. LONG32                                  m_lRefCount;                            // RefCount
  153. CHXString                               mFilePath;                                      // Path to the file being used.
  154. BOOL                                    mFileOpen;                                      // Is the file we are using open?
  155. LISTPOSITION mCachePos;     // used in GetFirst/GetNext resource methods
  156. CHXSimpleList*  mCacheList;     // Used to cache the resources as they are loaded.
  157. CHXSimpleList*  mLoadedCache; // Items which are loaded into memory.
  158. static const char* const zm_pName;
  159. static const char* const zm_pDescription;
  160. static const char* const zm_pCopyright;
  161. static const char* const zm_pMoreInfoURL;
  162. UINT32 m_nCodePage;
  163. INT16 m_nResFileRef;
  164. };
  165. class   CHXXResource: public IHXXResource
  166. {
  167. public:
  168. CHXXResource (void* data,
  169. ULONG32 datalength, 
  170. ULONG32 ID, 
  171. ULONG32 Type, 
  172. ULONG32 Language, 
  173. IHXXResFile*  file);
  174. ~CHXXResource ();
  175. STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppvObj);
  176. STDMETHOD_(ULONG32, AddRef) (THIS);
  177. STDMETHOD_(ULONG32, Release) (THIS);
  178. //
  179. //      Functions for determining information from a loaded resource.
  180. //
  181. STDMETHOD_(ULONG32,ID)                  (THIS);
  182. STDMETHOD_(ULONG32,Type)                (THIS); 
  183. STDMETHOD_(ULONG32,Length)              (THIS);
  184. STDMETHOD_(ULONG32,Language) (THIS);
  185. STDMETHOD_(IHXXResFile*,ResFile) (THIS);
  186. //
  187. //      Data accessors
  188. //
  189. STDMETHOD_(void*,ResourceData) (THIS);
  190. private:
  191. LONG32                  m_lRefCount;
  192. IHXXResFile*           mResFile;
  193. void*                   mResData;
  194. ULONG32                 mID;
  195. ULONG32                 mType;
  196. ULONG32                 mLength;
  197. ULONG32 mLanguage;
  198. };
  199. #endif // _clntxres_h