clntxres.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:9k
源码类别:

Symbian

开发平台:

Visual C++

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