DynRes.cpp
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:3k
源码类别:

CA认证

开发平台:

Visual C++

  1. // Res1.cpp: implementation of the CRes class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "DynRes.h"
  6. #ifdef _DEBUG
  7. #undef THIS_FILE
  8. static char THIS_FILE[]=__FILE__;
  9. #define new DEBUG_NEW
  10. #endif
  11. //////////////////////////////////////////////////////////////////////
  12. // Construction/Destruction
  13. //////////////////////////////////////////////////////////////////////
  14. CRes::CRes()
  15. {
  16. hExe = NULL;
  17. hRes = NULL;
  18. hResLoad = NULL;
  19. lpResLock = NULL;
  20. }
  21. CRes::CRes(HMODULE Exe)
  22. {
  23. hExe = Exe;
  24. hRes = NULL;
  25. hResLoad = NULL;
  26. lpResLock = NULL;
  27. }
  28. CRes::~CRes()
  29. {
  30. FreeIt();
  31. }
  32. BOOL CRes::LoadExe()
  33. {
  34. FreeIt();
  35. hExe = LoadLibrary(m_Path ); 
  36.  
  37. if (hExe == NULL) 
  38. return FALSE;
  39. return TRUE;
  40. }
  41. void CRes::FreeIt()
  42. {
  43. if ( hExe)
  44. ::FreeLibrary ((HMODULE)hExe);
  45. hExe=NULL;
  46. }
  47. BOOL CRes::FindResource(int res,LPSTR type)
  48. {
  49. if ( hExe)
  50. hRes = ::FindResource((HMODULE)hExe, MAKEINTRESOURCE(res), type); 
  51. else
  52. return FALSE;
  53.   if (hRes == NULL) 
  54. return FALSE;
  55. return TRUE;
  56. }
  57. BOOL CRes::LoadResource()
  58. {
  59. if ( hExe)
  60. if ( hRes)
  61. hResLoad =(HRSRC):: LoadResource((HMODULE)hExe,hRes); 
  62. else
  63. return FALSE;
  64.  
  65. if (hResLoad == NULL)
  66. return FALSE;
  67. return TRUE;
  68. }
  69. BOOL CRes::EnumTypesFunc(HANDLE hModule, LPSTR lpType, LONG lParam)
  70. {
  71.       EnumResourceNames((HINSTANCE)hModule, 
  72.         lpType, 
  73.         (ENUMRESNAMEPROC)EnumNames, 
  74.         lParam); 
  75.  
  76.     return TRUE; 
  77. }
  78. BOOL CRes::EnumNames(HANDLE hModule, LPCTSTR lpType, LPTSTR lpName, LONG lParam)
  79. {
  80. CArray<__ResInfo,__ResInfo&> *infos =( CArray<__ResInfo,__ResInfo&> *)lParam;
  81. __ResInfo info;
  82.     if ((ULONG)lpName & 0xFFFF0000) 
  83.     { 
  84. info.m_Name = lpName;
  85.     } 
  86.     else 
  87.     { 
  88. info.m_Name .Format ("%u",(USHORT)lpName);
  89.     } 
  90. if ((ULONG)lpType & 0xFFFF0000) 
  91.     { 
  92.        info.m_Type = lpType; 
  93.    info.Type_Type =1;
  94.     } 
  95.     else 
  96.     { 
  97. info.Type_Type =0;
  98. info.m_Type .Format ("%u",(USHORT)lpType);
  99.  
  100. if (infos)
  101. infos->Add (info);
  102.     
  103.     return TRUE; 
  104. }
  105. BOOL CRes::LoadAllResource()
  106. {
  107.   if ( hExe)
  108.  {
  109. return EnumResourceTypes((HMODULE)hExe,              // module handle 
  110.     (ENUMRESTYPEPROC)EnumTypesFunc,  // callback function 
  111.     (LONG)&m_Infos);                              // extra parameter 
  112.   }
  113.   return FALSE;
  114. }
  115. HRSRC CRes::GetLoadedRes()
  116. {
  117. return hResLoad;
  118. }
  119. LPSTR CRes::LockRes()
  120. {
  121. lpResLock =(char*)::LockResource(hResLoad);
  122. return lpResLock;
  123. }