WHWilImage.cpp
上传用户:cydong117
上传日期:2009-11-10
资源大小:638k
文件大小:6k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. #include "StdAfx.h"
  2. CWHWilImageData::CWHWilImageData()
  3. {
  4. Init();
  5. }
  6. CWHWilImageData::~CWHWilImageData()
  7. {
  8. Destroy();
  9. }
  10. VOID CWHWilImageData::Init()
  11. {
  12. m_bIsMemMapped = FALSE;
  13. m_bIsCompressed = FALSE;
  14. m_pbStartData = NULL;
  15. ZeroMemory(&m_stWixImgaeInfo, sizeof(WIXIMAGEINFO));
  16. ZeroMemory(&m_stNewWixImgaeInfo, sizeof(WIXIMAGEINFO));
  17. ZeroMemory(&m_szWilFileName, sizeof(MAX_PATH));
  18. m_nCurrImageIdx = -1; // 檬扁 技泼摹啊 汲沥登瘤 臼篮惑怕.
  19. m_pbCurrImage = NULL;
  20. m_lpstCurrWilImageInfo = NULL;
  21. m_lpstNewCurrWilImageInfo = NULL;
  22. }
  23. VOID CWHWilImageData::Destroy()
  24. {
  25. if ( m_pbStartData ) 
  26. {
  27. if ( m_bIsMemMapped )
  28. {
  29. UnmapViewOfFile(m_pbStartData);
  30. m_pbStartData = NULL;
  31. }
  32. else
  33. {
  34. SAFE_DELETE(m_pbStartData);
  35. }
  36. }
  37. SAFE_DELETE(m_stWixImgaeInfo.pnPosition);
  38. ZeroMemory(&m_stWixImgaeInfo, sizeof(WIXIMAGEINFO));
  39. SAFE_DELETE(m_stNewWixImgaeInfo.pnPosition);
  40. ZeroMemory(&m_stNewWixImgaeInfo, sizeof(NEWWIXIMAGEINFO));
  41. Init();
  42. }
  43. BOOL CWHWilImageData::Load(CHAR* szWilFile, BOOL bIsMemMapped, BOOL bComp)
  44. {
  45. m_bIsMemMapped = bIsMemMapped;
  46. m_bIsCompressed = bComp;
  47. HANDLE hWilFile;
  48. HANDLE hWixFile;
  49. HANDLE hWilMappedFile;
  50. DWORD dwReadLen;
  51. CHAR szWixFile[MAX_PATH];
  52. CHAR szMsg[MAX_PATH];
  53. strcpy(szWixFile, szWilFile);
  54. strcpy(szWixFile+strlen(szWixFile)-3, "wix");
  55. strcpy(m_szWilFileName, szWilFile);
  56. hWixFile= CreateFile(szWixFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  57. if ( hWixFile )
  58. {
  59. ReadFile(hWixFile, &m_stWixImgaeInfo, sizeof(WIXIMAGEINFO)-sizeof(INT*), &dwReadLen, NULL);
  60. m_stWixImgaeInfo.pnPosition = new INT[m_stWixImgaeInfo.nIndexCount];
  61. ReadFile(hWixFile, m_stWixImgaeInfo.pnPosition, sizeof(INT)*m_stWixImgaeInfo.nIndexCount, &dwReadLen, NULL);
  62. hWilFile = CreateFile(szWilFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
  63. if ( hWilFile != INVALID_HANDLE_VALUE )
  64. {
  65. // 皋葛府甘屈怕老锭.
  66. if ( m_bIsMemMapped )
  67. {
  68. hWilMappedFile = CreateFileMapping(hWilFile, NULL, PAGE_READONLY, NULL, NULL, NULL);
  69. m_pbStartData = (BYTE*)MapViewOfFile(hWilMappedFile, FILE_MAP_READ, NULL, NULL, NULL);
  70. if ( !m_pbStartData )
  71. {
  72. // Debug
  73. MessageBox(NULL, "CreateFileMapping Failed", "Mir2EX :: Error", MB_ICONERROR | MB_OK);
  74. CloseHandle(hWilFile);
  75. CloseHandle(hWixFile);
  76. return FALSE;
  77. }
  78. CloseHandle(hWilMappedFile);
  79. }
  80. else
  81. {
  82. DWORD dwFileSize;
  83. dwFileSize = GetFileSize(hWilFile, NULL);
  84. m_pbStartData = new BYTE[dwFileSize];
  85. ReadFile(hWilFile, m_pbStartData, dwFileSize, &dwReadLen, NULL);
  86. }
  87. SetIndex(0); // 0锅 牢郸胶肺 技泼茄促.
  88. CloseHandle(hWilFile);
  89. CloseHandle(hWixFile);
  90. return TRUE;
  91. }
  92. wsprintf(szMsg, "Cannot find %s file", szWixFile);
  93. // Debug
  94. MessageBox(NULL, szMsg, "Mir2EX :: Error", MB_ICONERROR | MB_OK);
  95. CloseHandle(hWixFile);
  96. return FALSE;
  97. }
  98. wsprintf(szMsg, "Cannot find %s file", szWixFile);
  99. // Debug
  100. MessageBox(NULL, szMsg, "Mir2EX :: Error", MB_ICONERROR | MB_OK);
  101. return FALSE;
  102. }
  103. VOID CWHWilImageData::SetIndex(INT nIndex)
  104. {
  105. if ( m_nCurrImageIdx == nIndex ) return; // 货肺 Setting登绰 Index啊 函拳啊 绝促搁.
  106. m_nCurrImageIdx = nIndex;
  107. BYTE* pbTmpData = (BYTE*)(m_pbStartData + m_stWixImgaeInfo.pnPosition[nIndex]);
  108. m_lpstCurrWilImageInfo = (LPWILIMAGEINFO)pbTmpData;
  109. if ( m_bIsCompressed )
  110. m_pbCurrImage = (BYTE*)(pbTmpData + sizeof(WILIMAGEINFO));
  111. else
  112. m_pbCurrImage = (BYTE*)(pbTmpData + sizeof(WILIMAGEINFO) - sizeof(DWORD));
  113. }
  114. BOOL CWHWilImageData::NewSetIndex(DWORD dwIndex)
  115. {
  116. // if ( m_nCurrImageIdx == nIndex || !m_stNewWixImgaeInfo.pnPosition[nIndex] ) return; // 货肺 Setting登绰 Index啊 函拳啊 绝促搁.
  117. m_nCurrImageIdx = dwIndex;
  118. if ( m_stNewWixImgaeInfo.pnPosition[dwIndex] != 0 && dwIndex >= 0 && (INT)dwIndex < m_stNewWixImgaeInfo.nIndexCount )
  119. {
  120. BYTE* pbTmpData = (BYTE*)(m_pbStartData + m_stNewWixImgaeInfo.pnPosition[dwIndex]);
  121. m_lpstNewCurrWilImageInfo = (LPNEWWILIMAGEINFO)pbTmpData;
  122. if ( m_bIsCompressed )
  123. m_pbCurrImage = (BYTE*)(pbTmpData + sizeof(NEWWILIMAGEINFO));
  124. else
  125. m_pbCurrImage = (BYTE*)(pbTmpData + sizeof(NEWWILIMAGEINFO) - sizeof(DWORD));
  126. return TRUE;
  127. }
  128. return FALSE;
  129. }
  130. BOOL CWHWilImageData::NewLoad(CHAR* szWilFile, BOOL bIsMemMapped, BOOL bComp)
  131. {
  132. m_bIsMemMapped = bIsMemMapped;
  133. m_bIsCompressed = bComp;
  134. HANDLE hWilFile;
  135. HANDLE hWixFile;
  136. HANDLE hWilMappedFile;
  137. DWORD dwReadLen;
  138. CHAR szWixFile[MAX_PATH];
  139. CHAR szMsg[MAX_PATH];
  140. strcpy(szWixFile, szWilFile);
  141. strcpy(szWixFile+strlen(szWixFile)-3, "wix");
  142. strcpy(m_szWilFileName, szWilFile);
  143. hWixFile= CreateFile(szWixFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  144. if ( hWixFile )
  145. {
  146. ReadFile(hWixFile, &m_stNewWixImgaeInfo, sizeof(NEWWIXIMAGEINFO)-sizeof(INT*), &dwReadLen, NULL);
  147. m_stNewWixImgaeInfo.pnPosition = new INT[m_stNewWixImgaeInfo.nIndexCount];
  148. ReadFile(hWixFile, m_stNewWixImgaeInfo.pnPosition, sizeof(INT)*m_stNewWixImgaeInfo.nIndexCount, &dwReadLen, NULL);
  149. hWilFile = CreateFile(szWilFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
  150. if ( hWilFile != INVALID_HANDLE_VALUE )
  151. {
  152. // 皋葛府甘屈怕老锭.
  153. if ( m_bIsMemMapped )
  154. {
  155. hWilMappedFile = CreateFileMapping(hWilFile, NULL, PAGE_READONLY, NULL, NULL, NULL);
  156. m_pbStartData = (BYTE*)MapViewOfFile(hWilMappedFile, FILE_MAP_READ, NULL, NULL, NULL);
  157. if ( !m_pbStartData )
  158. {
  159. // Debug
  160. MessageBox(NULL, "CreateFileMapping Failed", "Mir2EX :: Error", MB_ICONERROR | MB_OK);
  161. CloseHandle(hWilFile);
  162. CloseHandle(hWixFile);
  163. return FALSE;
  164. }
  165. CloseHandle(hWilMappedFile);
  166. }
  167. else
  168. {
  169. DWORD dwFileSize;
  170. dwFileSize = GetFileSize(hWilFile, NULL);
  171. m_pbStartData = new BYTE[dwFileSize];
  172. ReadFile(hWilFile, m_pbStartData, dwFileSize, &dwReadLen, NULL);
  173. }
  174. NewSetIndex(0); // 0锅 牢郸胶肺 技泼茄促.
  175. CloseHandle(hWilFile);
  176. return TRUE;
  177. }
  178. wsprintf(szMsg, "Cannot find %s file", szWixFile);
  179. // Debug
  180. MessageBox(NULL, szMsg, "Mir2EX :: Error", MB_ICONERROR | MB_OK);
  181. CloseHandle(hWixFile);
  182. return FALSE;
  183. }
  184. wsprintf(szMsg, "Cannot find %s file", szWixFile);
  185. // Debug
  186. MessageBox(NULL, szMsg, "Mir2EX :: Error", MB_ICONERROR | MB_OK);
  187. return FALSE;
  188. }